10-函数进阶
函数的动态传输
*args:动态接受参数(万能参数):
接受的就是实参对应的所有位置参数。并将其放在元组中
形参对应顺序:
形参角度:
位置参数,*args,关键字参数
位置参数,*args,关键字参数 **kwargs
*的作用:
在函数的调用中
*可迭代对象 代表解包,或打散。(lsit,tuple,str,dic(只有键)),将元素意义添加到args。
**字典,代表打散,将所有的键值对放到一个kwargs的字典中
在函数的定义时, *args 代表的是聚合,**kwargs代表的是聚合。
**kwargs:动态传参,只接受关键字参数(非位置对应的)并将它放在一个字典中。
1 def test1(w,**kwargs): 2 print(kwargs) 3 test1(1,q= 0,l =0) 4 5 def test2(a,b,c,d,e,*args,f = 6): 6 print(a,b,c,d,e,f,args) 7 test2(1,2,5,6,9,7,4,3,6,5,2,f =12)
def func(*args):
print(*args) #(1,2,30,1,2,33.。。。。。)
l1 = [1,2,30]
l2= [1,2,33,21,45,66]
func(*l1,*l2)
加载顺序与取值顺序:
加载顺序:
内置名称空间--->全局名称空间--->(函数执行时)局部名称空间。
取值顺序:
(函数执行时)局部名称空间--->全局名称空间--->内置名称空间
全局作用域,局部作用域:
全局作用域:全局名称空间、内置名称空间
局部作用域:局部作用域
函数的嵌套:
函数的嵌套主要在于逻辑,每当遇到函数调用函数时,函数才会执行,否则,函数不会执行。
1 def test1(): 2 print(8) 3 def test2(): 4 def test3(): 5 print(6) 6 return True 7 print(7) 8 test3() 9 test2() 10 print(1) 11 test1()
loals(),golbals():
golbals():全局名称空间:所有变量
loals():局部名称空间:所有变量
将局部变量整合到字典当中,可以返回给函数调用者使用。
1 a = 1 2 b = 5 3 def test4(): 4 c = 2 5 d = 4 6 print(globals()) 7 print(locals()) 8 9 test4() 10 11 12 13 输出结果: 14 globals输出全局变量: 15 {'test4': <function test4 at 0x000001AF0B4DE950>, 'b': 5, '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001AF0B416B38>, '__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__cached__': None, 'a': 1, '__file__': 'E:/Programming/python11/day10/关键字.py'} 16 locals输出局部变量(函数体之内的变量): 17 {'c': 2, 'd': 4}
nonlocal,golbal:
nonlocal:
>不能修改全局变量
>在局部作用域中,对父级作用域(或者更外层作用域非全局变量)的变量
1 a = 5 2 def test6(): 3 b = 7 4 def test7(): 5 a = 200 6 b = 500 7 def test8(): 8 nonlocal a 9 nonlocal b 10 11 a = 12 12 b = 44 13 print(a,b) 14 15 test8() 16 print(a, b) 17 test7() 18 print(b) 19 test6() 20 print(a) 21 22 23 输出结果: 24 12 44 25 12 44 26 7 27 5
golbal:
>在局部空间内建立\声明一个全局变量。
1 def test5(): 2 global name 3 name = 'cat' 4 print(name) 5 6 7 test5() 8 print(name)
>在局部变量中修改全局变量
1 name = 'kuoiea' 2 def test5(): 3 global name 4 name = 'cat' #改变全局变量 5 print(name) 6 7 print(name) #先打印出kuoiea 8 test5() 9 print(name) #打印cat

浙公网安备 33010602011771号