函数的名称空间、作用域以及global,nonlocal关键字
函数
动态参数:*args **kwargs
args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。
*的魔性用法:
def func1(*args):
print(args)
func1(*l1,*l2)
在函数的定义时,在*位置参数,**位置参数聚合。
在函数的调用(执行)时,在*位置参数,**位置参数打散。
形参传参的顺序:
位置参数--->*args--->默认参数--->**kwargs
全局名称空间:用来存放变量与值得关系的空间。
局部名称空间:代码运行时临时开辟出来的空间。
内置名称空间:pycharm解释器提供的拿过来就可以用的方法。
三种命名空间的加载和取值顺序:
加载顺序:内置命名空间(程序运行前加载)---->全局命名空间(程序运行中,从上到下加载)---->局部命名空间(程序运行中,调用时加载)
取值顺序: 就近原则
在局部调用:局部命名空间--->全局命名空间--->内置命名空间
在全局调用:全局命名空间--->内置命名空间
作用域:
全局作用域:包含内置名称空间,全局名称空间,整个文件的任意位置都能被引用,全局有效
局部作用域:局部名称空间,只能在局部范围内有效
关键字 global和nonlocal
global:声明一个全局变量,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到global
count=1
def func1():
global count
count=2
return count
print(func1())
nonlocal:不能修改全局变量,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层以下的此变量全部发生改变。
def func1():
count=666
def inner():
print(count)
def func2():
nonlocal count
count+=1
print('func2',count)
func2()
print('inner',count)
inner()
print('func1',count)
func1()
清风深知杨柳意,啤酒龙虾难相聚。

浙公网安备 33010602011771号