函数的参数有:形参、实参、行参、位置参数、关键词参数、默认参数,今天我们来讲讲动态参数!
动态参数(*args)
动态参数位置在位置参数后面!
View Code
关键字的形式传参(**kwargs)
扫描二维码关注公众号,回复:
5533888 查看本文章
1 def func(a,b,c,*args,x=1,y=1,z=1,**kwargs): 2 print(a,b,c) 3 print(args,kwargs) 4 print(x, y, z) 5 func(1,2,3,4,e=1,f=2,g=3) 6 # 1 2 3 7 # (1,2,3,4,5) 8 # 1 1 1 9 # {'e': 1, 'f': 1, 'g': 1}
那么我们只输入关键字参数,下图会输出什么呢?
最后只输出了(){‘a’:4,‘b’:5}
def func(*args,**kwargs): print(args,kwargs) # args = () kwargs = {'a':4,'b':5} func(a=4,b=5) def func(*args,**kwargs): print(args,kwargs) # args = (1,2,3) kwargs = {} func(1,2,3)
输出:
() {'a': 4, 'b': 5}
(1, 2, 3) {}
def func(*args,**kwargs): print(args,kwargs) # args = () kwargs = {} func(1,2,3,a=4,b=5)
输出:(1, 2, 3) {'a': 4, 'b': 5},args和kwargs都只接受对应自己的实参。
总结:
1.args和 kwargs 是可以更换的,但是程序员约定都用它
用途:在不明确接受参数,数量时使用*args和**kwargs
2.动态位置参数 > 动态关键字参数
形参: 位置 > 动态位置 > 默认参数 > 动态默认参数
实参: 位置 > 关键字参数
3.在实参调用的时候 *将可迭代的对象打散,字典是将键取出
在形参处出现*就是在聚合
4.在实参调用的时候 **将字典打散成 关键字参数(键=值)
在形参处出现**就是将关键字参数聚合成一个字典
函数的注释:
def aaa(user,pwd): """ 登录函数 :param user: 用户名 :param pwd: 密码 :return: 校验后的账号和密码 """ print(111) print(aaa.__doc__) 登录函数 :param user: 用户名 :param pwd: 密码 :return: 校验后的账号和密码
名称空间
1.内置空间中所有代码 -- 内置空间
2.自己写的py文件 -- 全局空间
3.函数中的代码 -- 局部空间
加载顺序:
'''
1.内置空间
2.全局空间
3.局部空间
'''
# 取值顺序:
'''
1.局部空间
2.全局空间
3.内置空间
4.找不到就报错
'''
# 作用域:
'''
1.全局作用域 内置+全局 = 全局作用域
2.局部作用域 函数内的就是局部作用域
global:
a = 10 def func(): global a # (声明)我要修改a 找到要a a+=1 # 修改 func() print(a)
输出的a是11
def func(): global a #(声明我要修改a,找不到a的时候在全局创建一个 a=0) a = 1 # a = 1 func() print(a)
输出的a是1
重点:函数的嵌套:
def func(): print(3) def f(): print(1) print(2) f() func()
函数的嵌套2