为什么可以在内嵌函数中引用主函数变量,但是有时却报错

def showA():
 a = 'A' 
 b = 'B' 
 print (a) 
 def showB(): 
     b = b 
    print (b) 
    showB()
showA()

为什么会提示UnboundLocalError: local variable ‘b’ referenced before assignment
? 但是我只在 showB()里面打印 b是正常的?
说明在 showB()里面可以访问showA中的b变量。为什么会报错?

我知道可以加 nonlocal解决, 但是就是不理解。

Jason990420
最佳答案

Python对函数中变量的处理方式有所不同,具体取决于您是从函数内部还是外部为其指定值. 如果在函数内为变量指定值,则默认情况下会将其视为局部变量, 除非你使用了globalnonlocal来设置变量.

以上代码缩排明显有问题, 暂不考虑.

b = b    # 变量读取及写入

因为变量有写入的动作, 所以该变量被视为局部变量, 因此在读取b时就会出现未设置值前参考使用问题.

3年前 评论
Jason990420 (作者) 3年前
gufeng0176 (楼主) 3年前
讨论数量: 2
Jason990420

Python对函数中变量的处理方式有所不同,具体取决于您是从函数内部还是外部为其指定值. 如果在函数内为变量指定值,则默认情况下会将其视为局部变量, 除非你使用了globalnonlocal来设置变量.

以上代码缩排明显有问题, 暂不考虑.

b = b    # 变量读取及写入

因为变量有写入的动作, 所以该变量被视为局部变量, 因此在读取b时就会出现未设置值前参考使用问题.

3年前 评论
Jason990420 (作者) 3年前
gufeng0176 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!