[关闭]
@zsh-o 2018-07-06T10:51:15.000000Z 字数 387 阅读 927

python函数局部作用域理解

编程


遇到了一个特别奇怪的问题

  1. def f1():
  2. x = 10
  3. def f2():
  4. if x == 0:
  5. return;
  6. else:
  7. x = x - 1
  8. f2()
  9. f2()
  10. print(x)
  11. f1()

上述代码会报错,说x未定义

  1. UnboundLocalError: local variable 'x' referenced before assignment

这个是由于python的局部作用域中的变量会从里向外进行搜索,在f2()函数里面对x进行了赋值x被认为是f2的局部变量而不是f1中的x = 10,所以报错,所以局部变量作用域的归属是看什么时候赋值(名字相同)来确定的

可以用global把x提升为全局变量,使f1f2x的作用域相同

  1. def f1():
  2. global x
  3. x = 10
  4. def f2():
  5. global x
  6. if x == 0:
  7. return;
  8. else:
  9. x = x - 1
  10. f2()
  11. f2()
  12. print(x)
  13. f1()

输出为0

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注