[英]Getting error in python when trying to print a variable from a class' function
[英]Getting error when I try to print a global variable in a function in Python3
在这个简单的代码中学习关于全局变量和局部变量的区别:
def sub():
print(a)
a="banana"
print(a)
a="apple"
sub()
print(a)
我收到一个错误:
UnboundLocalError
Traceback(最近一次通话最后一次)在
5
6 a="苹果"
----> 7 个子()
8 打印(一)在子()
1个定义子():
----> 2 打印(一)
3 a="香蕉"
4 打印(一)
5UnboundLocalError:分配前引用的局部变量“a”
我目前了解'a'是一个全局变量,它在 function之外声明。
(它没有像 C 中的 main() 一样在任何 function 上声明)
但是为什么这个错误告诉我'a'是一个局部变量?
我知道如果我在print(a)
行上方添加global a
将解决这个错误,但我想知道为什么。
Python 将这一行: function 中a="banana"
解释为新的局部变量a
的定义。 function 的 scope 中的这个变量替换了全局变量a
。 请注意, print(a)
(对局部变量a
引用)出现在a="banana"
(= 赋值)之前。 因此你得到错误: UnboundLocalError: local variable 'a' referenced before assignment
。
也可以看看:
当变量有值时,为什么我会收到 UnboundLocalError?
Python 陷阱
Python 开发人员最常犯的 10 个错误
主要原因是通过放置
打印(一)
在 function 内部将变量“a”设置为该 function 的局部变量(即局部范围)。 忽略
一个=“苹果”
在 function 之外定义。
由于 'a' 值尚未在 'sub' function 内部初始化,因此在执行 print(a) 时找不到它的值,因此显示在赋值之前引用的局部变量 'a' 这正是在上述情况下发生的情况。
总结
def sub():
# print(a) #Just comment this and you will understand the difference
## By doing print(a) inside sub function makes sets 'a' as local variable
## whose value has not been initialized
## and as its value couldn't be found while line print(a) executes hence shows
## local variable 'a' referenced before assignment which is exactly what
## happens
a="banana" # a is assigned here
print(a)
a="apple"
sub()
print(a)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.