函数的动态参数,命名空间
1 函数的动态参数
1 *args位置参数动态传参 *在这里表示接收位置传参的动态传参,接收到的是元组
def chi(*food): #参数名:food *表示动态传参 print(food) chi("菜花","馒头","花卷","小吃") 结果:(菜花,馒头,花卷,小吃)
2 **kwargs关键字参数动态传参
def chi(**food) **关键字传参 food是参数名 print(food) chi(冰淇淋="哈根达斯",零食="辣条",小吃="香肠") 结果:{冰淇淋:"哈根达斯",零食:"辣条",小吃:"香肠"} 结果是形成字典
顺序:位置参数,*args,默认值,**kwargs
def func(a,*args,c=6,**kwargs) print(a,args,c,kwargs) fun(2,12,23,c=4,哈哈="呵呵",多的="道德") 结果:2 (12,23),{哈哈:"呵呵",多的:"道德"}
形参的位置*,**,聚合
def func(*food): 形参 聚合,位置参数 print(food) lst =["鸡蛋","黄瓜","苹果"]
fun(*lst) 实参 打散 把list,tuple,set,str进行迭代打散
形参: 位置参数 按位置传参
默认参数 放在后面
动态参数 *args(形成元组) **kwargs(形成字典)
实参的位置*,**,打散
def func(**kwargs): 形参 聚合成关键字实参 print(kwargs) dic ={name:"alex",age:18} func(**dic) 实参 打散成关键字
实参: 位置参数 按形参的位置传值
关键字参数 按形参的关键字传值
混合参数(位置在前,关键字在后)
2 命名空间
1 内置名称空间
2 全局名称空间
3 局部名称空间
a =10 全局名称空间中的内容 def fn(): fn 也在全局名称空间 b=20 局部名称空间 print(a) def gn(): print(a) fn() gn()
作用域
1 全局作用域:内置+全局
2 局部作用域 局部(函数被调用时)
globals()查看全局中的内容
a=110 def fn(): b =20 局部 def gn(): 局部 print(globals()) 可以查看全局作用域中的内容 print(locals()) 查看当前作用域中的内容 gn() fn()
locals()查看当前作用域中的内容
3 函数的嵌套
def outer(): print("哈哈") def inner_1(): print("呵呵") def inner_1_1(): print("嘻嘻") inner_1_1() print("哄哄") def inner_2(): print("嘿嘿") inner_2() inner_1() outer()
结果:哈哈
嘿嘿
呵呵
嘻嘻
哄哄
函数可以相互嵌套
4 global和nonlocal关键
global:在局部访问全局中的内容
nonlocal:在局部寻找外层函数中里他最近的那个变量
a=10 def global a 作用:1 可以把全局中的内容引入到函数内部 2 在全局创建一个变量 a=10 a+=10 print(a)
a =10 def outer(): def inner():#inner中改变a的值
nonlocal a 寻找外层函数中离他最近的那个变量 a=20 inner() outer()