打印功能如何在功能内部工作?

时间:2018-09-24 11:25:30

标签: python

a = 17
 def test():
  print(a)
  a = 13
  print(a)
test()

这是一条错误消息。

Traceback (most recent call last):
  File "sandbox.py", line 6, in <module>
    test()
  File "sandbox.py", line 3, in test
    print(a)
UnboundLocalError: local variable 'a' referenced before assignment

我希望此代码将打印出17 13,但出现错误。第一个print(a)将打印17,因为尚未执行a = 13,第二个print(a)将打印本地13,这是因为变量是从本地访问到全局的。

我的解释有什么问题?看来我有些误会..谢谢

2 个答案:

答案 0 :(得分:2)

由于您的函数将a定义为局部变量it is considered a local variable everywhere in the function。然后,您的第一个print语句在初始分配变量之前先对其进行引用。

全局变量可能会造成混淆(以及对哪些函数进行更改的解释会更加复杂),并且最佳实践(在大多数语言中)是不使用它们。更好的样品配方可能是

def test(a):
  print(a)
  a = 13
  print(a)

if __name__ == '__main__':
  test(17)

答案 1 :(得分:0)

在访问函数内部的变量之前,必须使用global关键字。有关更多参考,see this link

a = 17
def test():
   global a
   print(a)
   a = 13
   print(a)
test()