当我尝试在 Python3 中的函数中打印全局变量时出错
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 (most recent call last)
in
5
6 a="apple"
----> 7 sub()
8 print(a)
in sub()
1 def sub():
----> 2 print(a)
3 a="banana"
4 print(a)
5
UnboundLocalError: local variable 'a' referenced before assignment
我目前了解到 'a' 是一个全局变量,它在 函数之外声明。
(它没有在像 C 中的 main() 这样的任何函数上声明)
但是为什么这个错误告诉我 'a' 是局部变量?
我知道如果我在 print(a)
行上方添加 global a
将解决此错误,但我想知道为什么。
Python 将函数中的这一行:a="banana"
解释为新的局部变量 a
的定义。函数范围内的这个变量取代了全局变量a
。请注意,print(a)
(对局部变量 a
的引用)发生在 之前 a="banana"
(= 赋值)。因此你得到错误:UnboundLocalError: local variable 'a' referenced before assignment
.
另请参见:
Why am I getting an UnboundLocalError when the variable has a value?
Python gotchas
The 10 Most Common Mistakes That Python Developers Make
主要原因是通过放置
print(a)
在函数内部将变量 'a' 设置为该函数的局部变量(即局部作用域)。忽略
a="apple"
在函数外定义。
并且由于 'a' 值尚未在 'sub' 函数中初始化,因此在执行 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)
在这个简单的代码中了解全局变量和局部变量的区别:
def sub():
print(a)
a="banana"
print(a)
a="apple"
sub()
print(a)
我收到一个错误:
UnboundLocalError
Traceback (most recent call last) in
5
6 a="apple"
----> 7 sub()
8 print(a)in sub()
1 def sub():
----> 2 print(a)
3 a="banana"
4 print(a)
5UnboundLocalError: local variable 'a' referenced before assignment
我目前了解到 'a' 是一个全局变量,它在 函数之外声明。
(它没有在像 C 中的 main() 这样的任何函数上声明)
但是为什么这个错误告诉我 'a' 是局部变量?
我知道如果我在 print(a)
行上方添加 global a
将解决此错误,但我想知道为什么。
Python 将函数中的这一行:a="banana"
解释为新的局部变量 a
的定义。函数范围内的这个变量取代了全局变量a
。请注意,print(a)
(对局部变量 a
的引用)发生在 之前 a="banana"
(= 赋值)。因此你得到错误:UnboundLocalError: local variable 'a' referenced before assignment
.
另请参见:
Why am I getting an UnboundLocalError when the variable has a value?
Python gotchas
The 10 Most Common Mistakes That Python Developers Make
主要原因是通过放置
print(a)
在函数内部将变量 'a' 设置为该函数的局部变量(即局部作用域)。忽略
a="apple"
在函数外定义。
并且由于 'a' 值尚未在 'sub' 函数中初始化,因此在执行 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)