day10 函数的动态参数 与 命名空间
函数的动态参数:
动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,**kwargs接收,args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。
def trans_para(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) trans_para("jinxin",12,[1,2,3,4],[3,4,],(1,4,7),{"a":"123","c":456},country="china")
def func(*args): # print(args) # func(1,2,3,4,5,7,8,9,1,2,3,4,5,6,7,8) #*args 动态参数,万能参数 #args接受的就是实参对应的 所有位置参数,并将其放在元组中。 #形参对应顺序: #位置参数,*args,默认参数 # def func(a,b,c,d,*args,e='男'): # print(a) # print(b) # print(c) # print(d) # print(args) # print(e) # func(1,2,3,4,5,6,7,e='女') #**kwargs 动态传参,他将所有的关键字参数(无意义的)放到一个字典中。 # def func(a,b,c,**kwargs): # print(kwargs) # func(1,2,r=4,b1=5,c1=6,c=7,) # def func(a,b,c,d,*args,e='男',**kwargs): # print(a) # print(b) # print(c) # print(d) # print(args) # print(e) # print(kwargs) # func(1,2,3,4,5,6,7,v=3,m=7,h=9,e='女') # 最终顺序:位置参数,*args,默认参数,**kwargs # def func1(*args,**kwargs): # pass # func1() # * 魔法运用 # def func(*args): # print(args) #(1,2,30,1,2,33.。。。。。) # l1 = [1,2,30] # l2 = [1,2,33,21,45,66] # tu = (1,2,3) # func(1,2,30,1,2,33,21,45,66) # func(*'qweqrfdsaf') # func(*{'name':'alex',"age":12}) # func(*l1,*l2) # def func(*args): # print(args) # func(1,2,3,10,20,80) # def func(**kwargs): # print(kwargs) # # dic1 = {'name1':'alex','age1':46} # dic2 = {'name':'老男孩','age':56} # func(**dic1,**dic2) # 在函数的调用执行时, # *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。 # **字典,代表打散,将所有键值对放到一个kwargs字典里。 # 在函数定义时, *args,**kwargs代表的是聚合。 # def func(*args,**kwargs): # print(args) # print(kwargs) # # dic1 = {'name1':'alex','age1':46} # dic2 = {'name':'老男孩','age':56} # func(*[1,2,3,4],*'asdfsad',**dic1,**dic2) def func(*args,**kwargs): #args = (1,2,3,4) #kwargs = {'age': 56, 'name': '老男孩'} # print(*args) # print(**kwargs) #(age = 56 ,name = 老男孩) # dic1 = {'name1':'alex','age1':46} # dic2 = {'name':'老男孩','age':56} # # func(*[1,2,3,4],*'asdfsad',**dic1,**dic2) # func(**dic2)
名称空间 临时名称空间
a = 4 # b = 3 # c = [1,2,3,4] # c1 = {'name':'alex'} # # def func1(): # name = '老男孩' # print(name) # func1() #当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系, # 随着函数的执行完毕,临时空间自动关闭。 #input(),print(),len 内置函数 # name = '老男孩' # def func1(): # name = 'taibai' # print(name) # func1() # def my_len(argv): # return 666 # print(len([12,3,])) a = 2 print(a) def func1(): age = 11 print(age) func1()
字典的嵌套
函数什么时候执行? 函数调用的时候执行。 # 代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。 # print(111) # def func1(): # print(333) # # def func2(): # print(444) # # def func3(): # print(555) # func2() # # func1() # print(222) # 111 333 222 # print(111) # def func1(): # print(333) # func2() # print(666) # # def func2(): # print(444) # # def func3(): # print(555) # # func1() # print(222) # 111 333 444 666 222 # print(111) # def func1(): # print(333) # func2() # print(666) # # def func2(): # print(444) # func3() # # def func3(): # print(555) # # func1() # print(222) # 111 333 444 555 666 222 # a = 2 # b = 3 # def func1(): # c = 5 # d = 6 # print(globals()) # 全局变量放在一个字典中 # return locals() # {'c': 5, 'd': 6} # print(func1()) # print(globals()) # 全局名称空间:所有变量 # print(locals()) # 局部名称空间:所有变量
函数什么时候执行? 函数调用的时候执行。 # 代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。 # print(111) # def func1(): # print(333) # # def func2(): # print(444) # # def func3(): # print(555) # func2() # # func1() # print(222) # 111 333 222 # print(111) # def func1(): # print(333) # func2() # print(666) # # def func2(): # print(444) # # def func3(): # print(555) # # func1() # print(222) # 111 333 444 666 222 # print(111) # def func1(): # print(333) # func2() # print(666) # # def func2(): # print(444) # func3() # # def func3(): # print(555) # # func1() # print(222) # 111 333 444 555 666 222 # a = 2 # b = 3 # def func1(): # c = 5 # d = 6 # print(globals()) # 全局变量放在一个字典中 # return locals() # {'c': 5, 'd': 6} # print(func1()) # print(globals()) # 全局名称空间:所有变量 # print(locals()) # 局部名称空间:所有变量
关键字 global,nonlocal
global # 1,在局部空间内,声明一个全局变量 # def func1(): # global name # name = '老男孩' # print(name) # func1() # print(name) # 2,在局部空间内改变一个全局变量 a = 4 def func1(): global a a = 5 # print(name) func1() # print(a) #nonlocal # 1,不能修改全局变量。 # a = 4 # def func1(): # nonlocal a # a = 5 # # print(name) # func1() # print(a) #在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改, # 并且引用的哪层,从那层及以下此变量全部发生改变。 # a = 4 # def func1(): # b = 6 # def func2(): # b = 666 # print(b) #666 # func2() # print(b) # 6 # # func1() # b = 4 # def func1(): # global b # b = 6 # def func2(): # nonlocal b # b = 666 # print(b) # # func2() # print(b) # # print(b) # func1()

浙公网安备 33010602011771号