繁体   English   中英

当我尝试在 Python3 中的 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 打印(一)
5

UnboundLocalError:分配前引用的局部变量“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM