为什么在一些Python内置函数中我们使用像string这样的变量

时间:2017-10-16 14:54:27

标签: python built-in

例如

class c:
    var = 15

getattr(c, 'var')

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

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

2 个答案:

答案 0 :(得分:0)

如果你事先知道变量名,并且它们是常数,那么你可以用不同的方式做这两件事:

getattr(c, 'var')

这是:

的简写
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之前请三思。在运行时将任意变量放在模块的全局命名空间中?* 颤抖 *)

答案 1 :(得分:0)

where ( (excludeHeadOffice && u.location != "ho") || (!excludeHeadOffice && (u.location == location || location == null)) ) && (u.role == role || role == null) 返回一个字典,因此你必须使用变量名作为字符串来查看它。在globals()中,globals()['var']只是'var'返回的字典中的一个键,因此必须以字符串形式给出。

globals()getattr(c, 'var')中查找属性"var"

请记住:Python让我们沉重的思考。