一动态传参
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()) # 打印全局作用域中的内容