2012-12-24 157 views

回答

9

您可以在Python 3使用nonlocal statement

>>> def f(): 
...  x = 2 
...  def y(): 
...   nonlocal x 
...   x += 3 
...   print(x) 
...  y() 
...  print(x) 
... 

>>> f() 
5 
5 

在Python 2,你需要声明变量作为外部函数的属性来实现相同的。

>>> def f(): 
...  f.x = 2 
...  def y(): 
...   f.x += 3 
...   print(f.x) 
...  y() 
...  print(f.x) 
... 

>>> f() 
5 
5 

,或者使用我们还可以使用一个dictionarylist

>>> def f(): 
...  dct = {'x': 2} 
...  def y(): 
...   dct['x'] += 3 
...   print(dct['x']) 
...  y() 
...  print(dct['x']) 
... 

>>> f() 
5 
5 
+0

+1,但请注意,这仅适用于设置值,因此,如果你有外一个可变值范围,可以从内部范围对它进行变异。 –

+0

@Lattyware这就是我们为什么可以使用'dict'或'list'的原因,但是这看起来不错。 –

+0

@AshwiniChaudhary事实上,除非数据结构是需要的,否则其他选项会更好。 –

相关问题