在python内置函数上应用`getattr()`
我想申请getattr()python内置函数,可以吗?(参考)
例如:
getattr(???, 'abs')
我知道我可以简单地做:
>>> abs
<built-in function abs>
但我想使用getattr,因为关键字名称是字符串。
回答
该builtins模块:
您可以尝试导入builtins模块:
>>> import builtins
>>> getattr(builtins, 'abs')
<built-in function abs>
>>>
如文档中所述:
所以上面提到的builtins.open就是open函数。所以abs是一样的builtins.abs是一样的东西abs。但对于gettatr,getattr(builtins, 'abs')也一样builtins.abs。
原版__bultins__(不推荐):
你可以尝试从__builtins__:
>>> getattr(__builtins__, 'abs')
<built-in function abs>
>>>
如文档中所述:
builtins与代码块执行相关的命名空间实际上是通过__builtins__在其全局命名空间中查找名称来找到的;这应该是字典或模块(在后一种情况下使用模块的字典)。默认情况下,当在主
模块中时,__builtins__是内置模块builtins;在任何其他模块中时,__builtins__是builtins模块本身字典的别名
。
如您所见,不推荐使用,通常__builtins__也是 a dict,而不是模块。
如果您在模块编写代码,__builtins__将返回的字典别名builtins模块,这将使类似:{..., 'abs': <built-in function abs>, ...}。
更多关于getattr:
只是为了有更多的想法getattr,如文档中所述:
所以:
>>> import builtins
>>> getattr(builtins, 'abs')
<built-in function abs>
>>>
是相同的:
>>> import builtins
>>> builtins.abs
<built-in function abs>
>>>
所以你可能想知道,因为:
>>> abs
<built-in function abs>
给出同样的东西,为什么我们不能只做:
getattr(abs)
我们不能这样做的原因是,这getattr是假设来调用方法/功能/班的一类/模块。
使用getattr(builtins, 'abs')works的原因是因为它builtins是一个模块并且abs是一个类/方法,它将所有内置的Python关键字存储为该模块中的方法。
所有关键字都显示在文档的此页面上。