在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。但对于gettatrgetattr(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关键字存储为该模块中的方法。

所有关键字都显示在文档的此页面上。


以上是在python内置函数上应用`getattr()`的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>