回顾
一、参数的种类:
1、静态参数:
(1)、普通参数:严格按照顺序,将实际参数复制给形式参数。
(2)、默认参数:一定要放在参数列的最后(即普通参数后面)。
注意:
给默认参数传参,会被覆盖掉(例如:XX = OK被BB覆盖)
默认参数一定要放到,所有参数的末尾否则报错。
(3)、指定参数:讲实际参数复制给指定的形式参数。
2、动态参数:
(1)、*args: 把N个实参赋值给形参,并转化为元祖。 f(*[1,22,33,44,55])
(2)、**kwargs:把N个关键字参数转换成字典额方式。(关键字=key) f1(**{''k1":''v1","k2":"v2"})
(3)、万能参数:def f1(*args **kwargs)
动态参数
一、* : 接受N个位置参数,转化为元祖的形式:(*args)
实例1、实参无论传输的是什么数据类型,都会视为一个元素,并转化成元祖。
1 def f1(*args): 2 print(args,type(args)) 3 4 f1(11) 5 6 li = [11,22,33,44] 7 f1(li) 8 f1(li,'dy','aa','bb','cc') 9 10 11 显示结果: 12 (11,) <class 'tuple'> 13 ([11, 22, 33, 44],) <class 'tuple'> 14 ([11, 22, 33, 44], 'dy', 'aa', 'bb', 'cc') <class 'tuple'>
实例2、将列表里面的每一个元素,都将转化到元祖的元素里面:(可接收“,”的类型)
def f1(*args): print(args,type(args)) li = [11,22,33,44] f1(*li) a = "Alex" f1(*a) 显示结果: (11, 22, 33, 44) <class 'tuple'> ('A', 'l', 'e', 'x') <class 'tuple'> 注意:实际是按照每个元素做了一次for 循环
二、 ** : **kwargs:把N个关键字参数转换成字典额方式。
在传值的时候,只能用“key:value”的方式进行传值
实例1、必须指定一个key=value作为字典中的key:value
def f1(**kwargs): print(kwargs,type(kwargs)) f1(n1="alex",n2=18) {'n2': 18, 'n1': 'alex'} <class 'dict'>
实例2:可以结合字典变量传输一个键值对
1 def f1(**kwargs): 2 print(kwargs,type(kwargs)) 3 4 5 dic = {'k1':'v1','k2':'v2'} 6 f1(kk=dic) 7 8 9 {'kk': {'k2': 'v2', 'k1': 'v1'}} <class 'dict'>
实例3:直接的赋值,不需要做变动
1 def f1(**kwargs): 2 print(kwargs,type(kwargs)) 3 4 5 dic = {'k1':'v1','k2':'v2'} 6 f1(**dic) 7 f1(dic) 8 9 10 {'k2': 'v2', 'k1': 'v1'} <class 'dict'> 11 Traceback (most recent call last): 12 File "D:/软件/pychar/data/day3/test.py", line 22, in <module> 13 f1(dic) 14 TypeError: f1() takes 0 positional arguments but 1 was given 15 16 17 注意:如果不加**传值变量时就会报错。
三、万能参数:
实例1:一个星的在前面,两个星的在后面
1 def f1(*args,**kwargs): 2 print(args) 3 print(kwargs) 4 5 f1(11,22,33,44,k1="v1",k2="v2") 6 7 8 显示结果: 9 (11, 22, 33, 44) 10 {'k2': 'v2', 'k1': 'v1'}