Python 函数
一、函数的定义
#语法
def 函数名(参数1,参数2,参数3,...): # ---》 def ____ (): 是语法,必须要有。 函数名 是一个变量名,指向 函数代码的内存地址,必须要有。参数可以省略
'''注释''' # ---》 默认None,可以没有
函数体 # ---》 默认None,可以pass
return 返回的值 # ---》 默认None,可以没有
#函数名要能反映其意义
一、函数的参数
1.形参(形式参数):相当于变量名;是定义函数阶段定义的参数。
a.位置形参
在函数定义阶段,按照从左到右的顺序依次定义的“变量名“,必须被传值,多一个不行,少一个也不行。
b. 默认形参
在函数定义阶段,已经被赋值的形参,在函数调用阶段可以不赋值。def func(x=3):
与位置形参混用是,默认形参要在位置形参的右边, error: non_default argument follows default argument
虽然默认值可以被指定为任意数据类型,但是不推荐使用可变类型。
2.实参(实际参数):相当于变量值;是在调用函数阶段传入的值。
a.位置实参
在函数调用阶段,按照从左到右的顺序依次传入的值,与按照顺序与形参一一对应。
b.关键字实参
- 在函数调用阶段,按照key = value 的形式传入的值,知名道姓的给某个形参传值,完全不用考虑形参的顺序。
- 与位置实参混用的时候,位置实参必须放在关键字实参前。error :positional argument follows keyword argument.
- 不能给同一个形参重复传值
c.可变长度参数
- 可变长度参数指的是在调用函数时,传入的实参的个数是不固定的。
- 而实参是用来给形参赋值的,所以对应着,针对溢出的实参必须有对应的形参来接收
- 有一种形参格式*args 用来接收溢出的位置实参,
-- f(x,*args)---f(1,2,3,3) .多出来的(2,3,3)会被* 处理成元祖,传给变量args, args = (2,3,3)
-- * 可以用在实参中,f(x,y,z) --- f(*[1,2,3]) = f(1,2,3).. * 会把列表中的元素变成 一个个位置实参,按顺序传给位置形参
--有一种形参格式**kwargs 用来接收溢出的关键字实参
-- f(x,**kwargs)--f(x=1,y=2,z=3) .多出来的(y=2,z=3)会被* 处理成字典{“y":2,”z":3},传给变量kwargs, kwargs = {“y":2,”z":3}
-- ** 可以用在实参中,f(x,y,z) --- f(* {'x':1,'y':2,”z":3}) = f(x=1,y=2,z=3).. 8* 会把字典中的元素变成 一个个关键字实参,传给对应的形参
4.函数调用时,将值的内存地址绑定到变量名上,函数调用结束,解除绑定。
a.这种绑定关系只能在函数体内使用
b.这种绑定关系在调用函数时生效,结束调用后解除