一、函数传参的四类参数
1、位置传参与关键字传参
def func(a, b, c):
print(f'a:{a}')
print(f'b:{b}')
print(f'c:{c}')
位置传参
func(1,2,3)
func(3,1,2)
关键字传参
func(a=10, b=20, c=30)
func(c=10, a=20, b=30)
混合使用, 先写位置传参,再写关键字传参
'''先写没等号的,再写有等号的,有等号的要在后边'''
func(10, b=20, c=30)
func(a=10, 20, 30) # 代码会报错
func(10, a=30, b=20) # 代码会报错
2、缺省参数
print()
'''
有等号的在后边写
'''
def func(a, b, c=10): # 形参c 称为缺省形参
print(f"a: {a}")
print(f"b: {b}")
print(f"c: {c}")
func(1, 2) # 没有给c 传递实参,使用默认值10
func(1, 2, 3) # 给c传递实参值,使用传递的数据3
def fun1(a=1, b, c): # 代码报错,语法错误
pass
3、不定长参数(重点)
有两个注意点: 函数定义中的 args 和 kwargs可以是任意的形参变量,不过习惯使用 args 和 kwargs.
print(1)
print(1, 2)
print(1, 2, 3)
print(1, 2, 3, 4)
print(1, 2, 3, 4, 5)
def func(args, kwargs): # 两个普通的形参
print(args)
print(kwargs)
func(1, 2)
func(args=2, kwargs=1)
print('' 30)
print('' 30)
def func(args, *kwargs):
print(args)
print(kwargs)
func(1, 2, 3, 3, 4, 5)
'''(1, 2, 3, 3, 4, 5)
{}'''
func(a=1, b=2, c=3, d=4)
'''()
{'a': 1, 'b': 2, 'c': 3, 'd': 4}'''
func(1, 2, 3, a=4, b=5, d=6)
'''(1, 2, 3)
{'a': 4, 'b': 5, 'd': 6}'''
重点!!!(下面的)
def func(args, *kwargs):
print('args', args)
print('kwargs', kwargs)
my_list = [1, 2, 3, 4, 5, 6]
my_dict = {'a': 7, 'c': 8, 'b': 9, 'd': 10}
func(my_list) # 将列表作为一个数据进行传递(整体)
'''args ([1, 2, 3, 4, 5, 6],)
kwargs {}'''
func(*my_list) # 将列表中的每一个数据作为位置参数进行传递, 拆包
'''args (1, 2, 3, 4, 5, 6)
kwargs {}'''
func(*my_list ) # 这个会报错,因为本来该是元组的类型,加两个号,该放在字典的位置上,有冲突!
func(my_dict) # 将my_dict 作为一个位置实参进行传递(元组)
'''args ({'a': 7, 'c': 8, 'b': 9, 'd': 10},)
kwargs {}'''
func(*my_dict) # 将my_dict中的key 作为位置实参进行传递(元组)
'''args ('a', 'c', 'b', 'd')
kwargs {}'''
func(**my_dict) # 将my_dict中键值对作为关键字实参进行传递
'''args ()
kwargs {'a': 7, 'c': 8, 'b': 9, 'd': 10}'''
4、应用
def my_sum(args, *kwargs):
num = 0
for i in args:
num += i # num = num + i
for j in kwargs.values():
num += j
print(f"求和的结果为{num}")
my_sum(1, 2, 3, a=4, b=5, c=6) # 21
5、函数参数的完整格式
普通形参 缺省形参 不定长元组形参 不定长字典形参
def func(a, b=1): # 先普通再 缺省
pass
def func1(a, b=1, *args): # 语法上不会报错,但是缺省参数不能使用默认值
print('a', a)
print('b', b)
print(args)
def func2(a, *args, b=1): # 普通形参 不定长元组形参 缺省形参
print('a', a)
print('b', b)
print(args)
def func3(a, args, b=1, *kwargs): # 普通形参 不定长元组形参 缺省形参 不定长字典形参
pass
func1(1, 2, 3, 4)
func2(1, 2, 3, 4)
func2(1, 2, 3, 4, b=10)
6、print函数中的sep
print(1)
print(1, 2)
print(1, 2, 3)
print(1, 2, 3, 4)
print(1, 2, 3, 4, 5)
print(1)
print(1, 2, sep='*')
print(1, 2, 3, sep='_') # 1_2_*_3
print(1, 2, 3, 4, sep='hello')
print(1,2) # 1 2
print(1, 2, 3, 4, 5, sep=' ') # 默认 1 2 3 4 5
二、拆包