翼度科技»论坛 编程开发 python 查看内容

python中的全局变量与局部变量

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
1,局部变量与全局变量

1,定义

局部变量:就是在函数体内的变量,在python中冒号“:”后面的变量都是局部变量,当然局部与全局也是一个相对的概念。比如出现函数嵌套的情况。
全局变量:就是在模块中所有函数都可以调用的变量,一般在函数体外被定义。
 
2,使用过程

函数内的局部变量,在函数体外是不可以使用的,函数内的变量就是局部变量,只在函数体内生效。
[img=775,auto]https://uploader.shimo.im/f/aZrpxzyl3QDdYmNX.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2ODIzNDAxNTEsImZpbGVHVUlEIjoiNDdrZ00xam56UWZQMTgzViIsImlhdCI6MTY4MjMzOTg1MSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzAzMjQwNX0.X_R9256CVk4oJCaI2pTKwlBof7107Z-zO4yyR5LR2lo[/img]

例如,这里的discount(price,rate)函数,两个形式参数price和rate,还有final_price都是函数的局部变量。
如果在函数体外使用就会出错。
 
全局变量,比如这里的old_price,rate和new_price都是全局变量。因此可以在函数体内访问他们。在python中,可以肆无忌惮地在函数体内部使用全局变量,但是如果在函数体内修改全局变量则会出错。
[img=783,auto]https://uploader.shimo.im/f/XpDmjxI4wUJ1w1n7.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2ODIzNDAxNTEsImZpbGVHVUlEIjoiNDdrZ00xam56UWZQMTgzViIsImlhdCI6MTY4MjMzOTg1MSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzAzMjQwNX0.X_R9256CVk4oJCaI2pTKwlBof7107Z-zO4yyR5LR2lo[/img]

 
[img=909,auto]https://uploader.shimo.im/f/Nh5XmmIrnYhV4yqr.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2ODIzNDAxNTEsImZpbGVHVUlEIjoiNDdrZ00xam56UWZQMTgzViIsImlhdCI6MTY4MjMzOTg1MSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzAzMjQwNX0.X_R9256CVk4oJCaI2pTKwlBof7107Z-zO4yyR5LR2lo[/img]

[img=914,auto]https://uploader.shimo.im/f/K5utPUCwVMVt1HZH.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2ODIzNDAxNTEsImZpbGVHVUlEIjoiNDdrZ00xam56UWZQMTgzViIsImlhdCI6MTY4MjMzOTg1MSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzAzMjQwNX0.X_R9256CVk4oJCaI2pTKwlBof7107Z-zO4yyR5LR2lo[/img]

其实,当在函数体内部调用全局变量时,是可以正常使用的,
但是当在函数体内部修改全局变量时,python是在函数体内部新创建了一个同名的局部变量,所以当我们在函数体内部打印该变量时,是修改后的值,但是当在程序外部打印正常的全局变量时,发现值并没有被修改。正如小甲鱼解释的一样。
 
如果一定要在函数体内部修改全局变量,可以在变量名前加 global关键字,如下所示:
[img=897,auto]https://uploader.shimo.im/f/9LBsDLvXU9bXAT6T.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2ODIzNDAxNTEsImZpbGVHVUlEIjoiNDdrZ00xam56UWZQMTgzViIsImlhdCI6MTY4MjMzOTg1MSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzAzMjQwNX0.X_R9256CVk4oJCaI2pTKwlBof7107Z-zO4yyR5LR2lo[/img]

 
3,注意事项

注意:python出现这种现象是一种程序的保护机制,因为全局变量在很多地方都会使用,不建议在函数体内部修改全局变量,如果有这一类的操作,会导致程序很难维护。就像这里小甲鱼说的一样。

 
如果你已经知道在函数中修改全局变量可能会导致可读性变差、出现莫名其妙的BUG、代码的维护成本成倍提高,但还是要坚持这么做,可以用global关键字来实现。
但是,如果遇到这种情况,思考一下,为什么要这么做,能不能把变量的位置挪到函数内部,让它变成局部变量。如果可以,就不要使用全局变量,然后再函数里修改的操作。


来源:https://www.cnblogs.com/huayangshan/p/17350848.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具