为什么函数会打印一个我本地还没有赋值的变量

问题描述 投票:0回答:1

我还在学习python的过程中,有一个问题我无法理解。

def demo():
  print(a)
  a += 5

a = 100
print(a)
demo()
print(a)

如果我运行这个程序,它会给出一个明显的回溯错误。但是当我运行下面的代码时,问题就来了。

def demo():
  print(a)

a = 100
print(a)
demo()
print(a)

如果我删除

a += 5
行然后程序运行正常并产生输出 -

100
100
100

我的问题是它仍然应该给出回溯错误,因为我还没有定义函数体中的

a
是什么,我也没有给出
a
作为参数。但它没有给出错误。谁能给我解释一下这是为什么?

python python-3.x
1个回答
1
投票

在这种情况下,a 在全局/模块范围内。只要它只是被读取,它就可以从函数中读取,但是如果一个函数写入它然后它被认为是本地的所以它会导致打印错误。如果您确实想从

a
分配给全局
demo
,您必须使用
global
语句将其标记为这样。

def demo():
  global a
  print(a)
  a += 5

a = 100
print(a)
demo()
print(a)
100
100
105
© www.soinside.com 2019 - 2024. All rights reserved.