首页 > 编程语言 > 详细

Python进阶02 作用域

时间:2020-03-18 14:11:00      阅读:44      评论:0      收藏:0      [点我收藏+]

一、作用域

作用域针对变量而言,指申明了变量在程序里的可应用范围。

只有函数,类,模块会产生作用域,代码块不会产生作用域。例如for循环,if判断都不产生作用域。

 

二、作用域链

Python中作用域链,变量会由内到外去找,先去自己的作用域找,自己没有在去上级去找,一直到找不到报错。

技术分享图片

特性:函数未执行之前,作用域已经形成,作用域链也生成了。

name = "lzl"
 
def f1():
    print(name)
 
def f2():
    name = "eric"
    f1()
f2()
结果:
lzl

这里有解释:

在f2中执行f1时,f1的作用域链已经形成,向上级找,name为lzl。

 

三、全局变量和局部变量

全局变量:所有函数之外定义的变量。

局部变量:函数内部定义的变量或者类,模块里的变量。

 

函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。

(即声明了一个新的局部变量。如果这个变量名字和全部变量名字相同,那么局部变量名字会覆盖全局变量名字。)

a = 10
b = 20
 
def fun():
 
    a = 1
    b = 10
    print(locals: , locals())

fun()
print(globals: , globals())

结果:
locals:  {a: 1, b: 10}
globals:  {__name__: __main__, __doc__: None, __package__: None, __loader__: <_frozen_importlib_external.SourceFileLoader object at 0x10a2f0080>, __spec__: None, __annotations__: {}, __builtins__: <module builtins (built-in)>, __file__: /Volumes/DATA/python/python_test/test.py, __cached__: None, a: 10, b: 20, fun: <function fun at 0x10a283268>}

 

四、在函数中使用全局变量(务必慎用全局变量)

如果只是读取全局变量不会有任何问题。

如果想重新关联全局变量,则需要借助关键字global。

_num = 100

def func():
    global _num  # 声明这个Num是全局。如果全局变量已经有这个Num变量那就是指的它 如果全局没这个Num那就新定义一个全局变量。
    _num = 200
    print(_num)

func()
print(_num)  # 输出200 说明修改的就是全局变量

 

参考文章:

https://www.cnblogs.com/goldsunshine/p/10948475.html

 

Python进阶02 作用域

原文:https://www.cnblogs.com/mazhiyong/p/12516323.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!