例如
class c:
var = 15
getattr(c, 'var')
或
i = 0
globals()['i'] = 25
为什么我们的变量写得像字符串类型。 我在一些内置函数和Django中看到了这一点,我认为这使代码很难理解不是吗?
答案 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让我们沉重的思考。