虽然没有内置的功能,但是很容易构造一个等效的功能。
您可以使用以下命令从内置命名空间中查找任何对象__builtin__ https://docs.python.org/2/library/__builtin__.html(Python 2)或builtins https://docs.python.org/3/library/builtins.html(Python 3) 模块然后将任意参数应用于*args
and **kwargs
syntax:
try:
# Python 2
import __builtin__ as builtins
except ImportError:
# Python 3
import builtins
def do_call(what, *args, **kwargs):
return getattr(builtins, what)(*args, **kwargs)
do_call('sum', range(1, 11))
一般来说,我们在Python中不会这样做。如果必须将字符串转换为函数对象,通常首选构建自定义字典:
functions = {
'sum': sum,
'mean': lambda v: sum(v) / len(v),
}
然后从该字典中查找函数:
functions['sum'](range(1, 11))
这使您可以严格控制动态代码可以使用哪些名称,从而防止用户通过调用内置函数来产生破坏性或破坏性效果,从而给自己带来麻烦。