一动态传参
1动态传参,可以接受任意的参数
顺序: 位置参数 *args 默认值 **kwargs
1位置参数的动态传参 写法*参数名 例如 *args 接受的参数是tuple
# def eat(*good): #动态传参,可以接受多个实参 # print(good) # eat("可乐","麻辣烫","火锅") # eat("麻辣烫") #接受的是元祖,括号里面的元素每个用逗号隔开
2关键字参数的动态传参, 写法 ** 参数名 例如**keargs 接受的参数是dict类型
# def eat(**kwargs): #接受的是关键字参数,也可接受多个传参 # print(kwargs) # eat(good="麻辣烫,盖浇饭",fruit="苹果",drink="七喜") #字典
3 无敌传参
def fun(*args,**keargs):
pass
# def rat(*args,**kwargs):#接受的是位置参数跟关键字参数 # print(args,kwargs) # rat(1,6,65,95+9,a=6,n=6) #打印的是元祖加字典
*,**的作用:
在形参:聚合
def fun(**kwargs): #吧打散的在聚合 print(kwargs) dic={"a":[1,2,3],"b":2} fun(**dic) # 吧字典打散
二 作用域的问题
1.globals()获取全局作用域的内容
2.locals()获取局部作用域中的内容
# a = 10 # def func(): # global a # 这里用的a是全局的 # a = 20 # print(a) # func() # print(a) # 20 a = 10 def func1(): a = 20 print(a) def fun2(): nonlocal a # 上一级, 且不能是全局 a = 30 print(a) fun2() print(a) func1() print(a)
三 函数嵌套-函数的执行流程
所有的()表示的是函数的调用
# def fun1(): # print(111) # # def fun2(): # print(222) # fun1() # # fun2() # print(333) # def fun2(): # print(222) # def fun3(): # print(666) # print(444) # fun3() # print(888) # # print(33) # fun2() # print(555) # def func(): # print("哈哈哈") # a = func # 函数可以赋值 .相当于. a和func是一回事儿 # func() # a()
四 global和nonlocal
1global:寻找全局作用域中的内容
# a = 10 # def func(): # global a # 这里用的a是全局的 # a = 20 # print(a) # func() # print(a) # 20
2nonlocai:寻找上一级作用域中的内容,但不能是全局的
a = 10 def func1(): a = 20 print(a) def fun2(): nonlocal a # 上一级, 且不能是全局 a = 30 print(a) fun2() print(a) func1() print(a)
五额外追加的内容 命名空间
a = 10 # 全局 def func(): # 全局 a = 40 # 局部 b = 20 # 局部 def abc(): # 局部 d = 30 # 是局部 print("哈哈") print(a, b) # 这⾥使⽤的是局部作⽤域 print(locals()) abc() # print(globals()) # 打印全局作用域中的内容 # print(locals()) # 打印局部作用域中的内容,locals()打印当前这个函数局部作用与中的内容 func() print(globals()) # print(globals()) # 打印全局作用域中的内容