Python变量Scope和.var

Python变量Scope和.var,python,namespaces,scope,global-variables,Python,Namespaces,Scope,Global Variables,在SaltyCraneBlog()上,我阅读了Python中的变量范围,所有内容都非常简单,直到我找到了设置全局变量的解决方法: def ex8(): ex8.var = 'foo' def inner(): ex8.var = 'bar' print 'inside inner, ex8.var is ', ex8.var inner() print 'inside outer function, ex8.var is ', ex

在SaltyCraneBlog()上,我阅读了Python中的变量范围,所有内容都非常简单,直到我找到了设置全局变量的解决方法:

def ex8():
    ex8.var = 'foo'
    def inner():
        ex8.var = 'bar'
        print 'inside inner, ex8.var is ', ex8.var
    inner()
    print 'inside outer function, ex8.var is ', ex8.var
ex8()
让我不舒服的是ex8.var部分。这是一个属性吗?如果var是ex8的一个属性,那么不需要首先定义var吗?可以在函数本身内调用函数的属性吗

让我不舒服的是ex8.var部分。这是一个属性吗

如果var是ex8的一个属性,那么不需要首先定义var吗

不可以。您可以随时在对象上设置属性,而无需预先删除它们(除非对象定义了阻止您这样做的特殊行为)

可以在函数本身内调用函数的属性吗

是的,可以从函数内部访问函数的属性。函数是一个类似于other的对象,您可以访问它的属性,就像访问当前范围内可访问的任何其他对象一样。(此处不“调用”属性,因为它的值不是函数;它只是您可以访问的值。)

正如您链接到的注释所提到的,这段代码所做的并不一定是一件好事。正如在那篇博文中提到的,Python3包含了一个
非本地
关键字,消除了对此类黑客行为的需求。即使在Python2中,也不常见需要使用这些技巧的情况