我在理解变量作用域时遇到了一些问题。对于正态变量,我理解它,但是如果我定义了一个对象,事情就会把我弄糊涂。请看一下这个代码:
class test():
pass
text="hi there"
num=1
p=test()
p.var="good bye"
p.arr = []
p.num = 5
def output_before():
print "before change: object text " ,p.var
print "before change: object number ", p.num
print "before change: basic text " ,text
print "before change: basic num ", num
def output_after():
print "after change: object text " ,p.var
print "after change: object number ", p.num
print "after change: basic text " ,text
print "after change: basic num ", num
def change():
text = "whats up"
num=5
p.num=10
p.var="good night"
p.arr.append ("sleep well")
output_before()
change()
output_after()
print p.arr
for i in range(5):
change()
print p.arr
这给了我一个结果:
before change: object text good bye
before change: object number 5
before change: basic text hi there
before change: basic num 1
after change: object text good night
after change: object number 10
after change: basic text hi there
after change: basic num 1
['sleep well']
['sleep well', 'sleep well', 'sleep well', 'sleep well', 'sleep well', 'sleep well']
来自类测试的对象在默认情况下似乎是全局的。是这样吗?你知道吗
谢谢你, 安迪
把对象p想象成其他任何基本类型。两者的规则相同。你知道吗
由于在函数之外声明对象,因此该对象的范围不受限制。另一方面,如果在一个函数上声明它,则不能在这些函数之外访问对象,因为该对象的作用域现在仅限于此函数。(当然,您可以明确地将其全球化。但这可能超出了这个问题目前的范围)
上述代码将失败,因为p在change()和output\ u after()中不是未知的。你知道吗
相关问题 更多 >
编程相关推荐