为什么Python中的int对象默认是localy范围?

时间:2013-07-05 02:21:12

标签: python compiler-construction scope

请参阅以下代码:

i = 1
s = [1]

def foo():
  global i
  i += 1
  print i

def goo():
  s.append(2)
  print s

我想知道为什么PyIntObject默认是在本地设置而其他对象不是?

谢谢!

1 个答案:

答案 0 :(得分:0)

除非您打算将global i绑定到其他对象,否则您不需要i。这同样适用于s。由于它们都绑定到不可变对象,因此无法在不将它们绑定到新对象的情况下更改其“值”。

所以这没关系

def foo():
    print i

但是你需要使用全局关键字

def foo():
    global i
    i = 'world'

同样适用于s。分配意味着您需要global关键字

def goo():
    global s
    s = 2

当然,您可以更改可变对象,因此通常不需要将它们设为全局

i = [1]

def foo():
    i[0] = 2

但是如果你想将它重新绑定到另一个对象,你仍然需要在那里使i全局