python:变量作用域

本文通过示例深入探讨了Python中的变量作用域,解释了为何在函数内部引用未赋值的局部变量会导致错误,并展示了如何使用`global`关键字将变量声明为全局变量以避免此类问题。同时,讨论了局部变量的赋值顺序对作用域的影响以及如何正确地管理变量的作用域。
摘要由CSDN通过智能技术生成

图片

 

接下来。装逼开始....

 

变量作用域

 

示例 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

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值