1.函数基本参数
#基本样例 函数参数的定义要和调用参数匹配,否则会报错
def fun01(a, b):
print(a, b)
if __name__ == '__main__':
# 正确的调用
fun01(1, 2)
# 错误 传递的多元的参数
fun01(1, 2, 3)
# 错误少传递的参数
fun01(1)
2.可变参数
# 定义参数时在参数前面加*,代表会将调用的参数合成一个元组,如果没有传递
# 参数,就代表时一个空元组
def fun01(*args):
print(args)
print(len(args))
if __name__ == '__main__':
# 合法调用,因为没有传递参数,args是一个空元组
fun01()
# 合法
fun01(1, 2, 3)
# 合法
fun01(1, 2, "hell")
# 不合法,无法处理key=value格式的参数
fun01(1,2,name="tom")
3. 位置参数
def fun01(a, b):
print(a, b)
if __name__ == '__main__':
# 因为使用了位置参数,两次调用时等价的
fun01(a="1", b="2")
fun01(b="2", a="1")
4. 可变位置参数
# kwargs参数加了**,代表kwargs会将参数转换成字典类型
def func01(**kwargs):
print(kwargs)
if __name__ == '__main__':
# 无参数,空字典
func01()
func01(name="tom")
func01(name="jack", age=11)
# 不合法,无法转换成字典格式
func01(1)
5.默认参数
# 如果未传递b,则b被赋值成1
def func01(a, b=1):
print(a, b)
if __name__ == '__main__':
func01(1)
print(1, 2)
6.控制参数的传递方式
# a 位置参数必须传递
# kwargs可选参数,但是如果传递必须以命名参数的方式传递
def func01(a, **kwargs):
print(a)
print(kwargs)
if __name__ == '__main__':
func01(3)
func01(3,name="tom",age=11)
# block 参数必须传递,且是命名参数的方式因为中间的*
# 像一个黑洞会吞噬maxsize后面的位置参数
def recv(maxsize, *, block):
'Receives a message'
pass
if __name__ == '__main__':
recv(3,block=True)
7.使用partial减少函数的参数
from functools import partial
def many_arguments(a, b, c, d, e):
print(a,b,c,d,e)
return a + b + c + d + e
if __name__ == '__main__':
# 将many_arguments函数中的参数a和b固定成1和2,返回一个新的函数
# 新的函数s1只需要传递c d e 这三个参数
s1 = partial(many_arguments, 1,2)
print(s1(2, 3, 4))