接下来。装逼开始....
变量作用域
示例 1 :定义一个函数,读取一个全局变量和未定义的局部变量和
def f1(a):
print(a)
print(b)
if __name__ == '__main__':
f1(2)
Traceback (most recent call last):
File "/Users/lifeng/python-projects/Test/pythonScripts/python_reduce.py", line 13, in <module>
f1(2)
File "/Users/lifeng/python-projects/Test/pythonScripts/python_reduce.py", line 9, in f1
print(b)
NameError: name 'b' is not defined
2
上述代码运行结果在意料之中会报错了...
实例2:下面先给变量b赋值下,然后再调用f1()后并运行代码:
上述代码,我们执行成功了,因为在开始时对b进行了赋值操作,也就是说现在的b是全局变量,python代码从上至下执行,所以运行成功。
示例3:现在给函数内部的b进行重新赋值,把9赋值给b
b = 0
def f1(a):
print(a)
print(b)
b = 9
if __name__ == '__main__':
f1(2)
2
Traceback (most recent call last):
File "/Users/lifeng/python-projects/Test/pythonScripts/python_reduce.py", line 14, in <module>
f1(2)
File "/Users/lifeng/python-projects/Test/pythonScripts/python_reduce.py", line 9, in f1
print(b)
UnboundLocalError: local variable 'b' referenced before assignment
上述代码也在意料之中报错了...
抛出:local variable 'b' referenced before assignment;翻译成中文就是:赋值之前引用了变量b
说一下为什么会报错:
首先是,在调用f1()函数后,python去识别函数体内的变量a并成功进行了打印,在识别变量b,发现内部的b在打印时并没有绑定值;因为函数内部b是先执行print,再进行赋值操作,从而python把b定性为局部变量,故而抛出UnboundLocalError错误(语言设计如此)...
如果想要打印b并且不报错,那就得把b设置成全局变量,这里就要使用关键字global在函数内部声明下:
b = 0
def f1(a):
global b
print(a)
print(b)
b = 9
if __name__ == '__main__':
f1(2)
2
0
上述代码运行后打印出来的是值为0,是因为在print(b)之前把给b设置了global关键字,变成了全局变量...
以上就是浅谈了变量作用域...
以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!
未完,待续…
一直都在努力,希望您也是
微信搜索公众号:就用python