为什么在某些 Python 内置函数中我们使用像字符串这样的变量

Why in some Python built-in functions we using variables like string

例如

class c:
    var = 15

getattr(c, 'var')

i = 0
globals()['i'] = 25

为什么这里我们的变量写成字符串类型。 我在一些内置函数和 Django 中看到了这一点,我认为这会使代码难以理解,不是吗?

如果您事先知道变量名称,并且它们是常量,那么您可以用不同的方式来完成这两件事:

getattr(c, 'var')

这是 shorthand 用于:

try:
    return c.var
except AttributeError:
    if have_default: # hand-wavey "more to this" for a later lesson
       return default
    raise

globals()['i'] = 25

是一种令人讨厌的做法

global i
i = 25

你给出的方法本质上是深入内部并摆弄它们。使用 global 关键字是声明您在全局范围内使用变量的更好方法,因为在解释函数时 python 知道此时变量来自不同的范围。

但是,如果您事先不知道变量的名称,那么您将不得不按照示例中的方式进行操作。 (但是请在使用 globals 之前三思。在运行时将任意变量放入模块的全局命名空间?*shudders*)

globals() returns 一个字典,所以你必须使用变量名作为字符串来查看它。在 globals()['var'] 中,'var' 只是 globals() 返回的字典中的一个键,所以它必须以字符串形式给出。

getattr(c, 'var')c.__dict__.

中查找属性 "var"

记住:Python 使 us 变得很沉重。