Python is Best

Python——函数作用域

2017-09-25  本文已影响9人  So_ProbuING

Python作用域基础

当在程序中使用变量名时,Python创建、改变或查找变量名都是在所谓的命名空间中进行的。作用域这个术语指的就是命名空间。在代码中变量名被赋值的位置决定了变量名能被访问到的范围

函数的作用域

作用域法则

作用域的产生

在Python中,只有函数(def) 类(class) 模块(module)才会引入新的作用域,其他的代码块不会产生新的作用域

变量名解析:LEGB原则

>>> # Global scope
>>> X = 99
>>> def func(Y):
...     Z=X+Y
...     return Z 
>>> fun(1)
>>> func(1)
100

内置作用域

LEGB 存在的问题

由于LEGB查找的流程,会使它在找到第一处变量名的地方生效,在本地作用域的变量名可能会覆盖在全局作用域和内置作用域的有着相同变量名的变量。全局变量名可能副高内置的变量名

locals() globals()

>>> animal = 'fruitbat'
>>> def change_local():
...     animal = 'wombat'
...     print('locals',locals())
... 
>>> animal
'fruitbat'
>>> change_local()
locals {'animal': 'wombat'}
>>> print('globals',globals())
globals {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': 
>>> animal
'fruitbat'

名称中 _用法

Python中以两个下划线__开头和结束的名称都是Python的保留用法。因此在自定义的变量中不能使用它们

上一篇 下一篇

猜你喜欢

热点阅读