2017-10-16 72 views
-2

例如为什么在一些Python的内置功能,我们使用的变量,比如字符串

class c: 
    var = 15 

getattr(c, 'var') 

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

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

+0

嗯,是的,在这些具体的例子有肯定做一个简单的方法。但是'getattr'和'globals'有它的用处,如果你想要处理未知的属性/变量和/或动态地设置它们。 – deceze

+0

你还想要一个变量的**名称**吗? –

+0

这些方法有其用处,但是,通常使用动态变量会使代码更难理解 –

回答

0

globals()返回一个字典,所以你必须使用变量名作为字符串看着它。在globals()['var']'var'只是在globals()返回字典的关键,因此它必须作为字符串。

getattr(c, 'var')寻找属性"var" in c.__dict__

记住:Python的让我们类型的字典沉重。

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 

是做

012讨厌的方式
global i 
i = 25 

你给基本上达到进入内部,并与他们摆弄周围的方法。使用global关键字来声明,你是在全球范围内使用的变量,因为当功能被解释Python知道该变量是在这一点上不同范围内更好的办法。

但是,如果你不知道该变量的名称预先,那么你会被迫做它在你的例子的方式。 (但请,请使用globals一个之前三思而后行。在运行时把任意变量在模块的全局命名空间?* 不寒而栗 *)

相关问题