Student1('大熊',1,3,4,5,age=22,hobby='篮球',x=1,y=2,z=3)
Hello,大家好!
我叫大熊,我今年22岁,我来自No addr
我的爱好是篮球,有兴趣大家可以一起玩呀!
------------------------------
1
3
4
5
------------------------------
x ---> 1
y ---> 2
z ---> 3
******************************
•两种收集参数的解包问题 ◦不同于上面的例子,当传入的参数不再是单个字符串或者数字时,例如传入的是一个列表或集合或元组或者字典等
◦当��入的参数为上面上面4个之一时,我们需要访问列表中的每一个元素时,就需要用到解包
◦
# 调用list到 *args
#
def Stu1(*args):
print('hahahhahahha')
for i in args:
print(i)
ll = ['wangmeili',22,'shanghai']
# 这种调用方式,直接将整个list打印出来
Stu1(ll)
print('---------------')
# 如果要将list中的每个元素都打印出来,就需要解包
Stu1(*ll)
hahahhahahha
['wangmeili', 22, 'shanghai']
---------------
hahahhahahha
wangmeili
22
shanghai
# 调用dict到 **args
def Stu2(**kwargs):
print('hahahhahahha')
for k,v in kwargs.items():
#print(type(k))
#print(type(v))
print(k,'>>>',v)
d = {'name':'wangmeili','age':'22','addr':'shanghai'}
# 此时若要将字典当作实参传递给kwargs,就必须先进性解包
Stu2(**d)
print('-------------')
# 不解包传参
Stu2(d)
# 不解包传参,函数会把传入的字典名称d,当作一个位置参数
hahahhahahha
name >>> wangmeili
age >>> 22
addr >>> shanghai
-------------
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-82-09f0a7d3879b> in <module>()
13
14 # 不解包传参
---> 15 Stu2(d)
TypeError: Stu2() takes 0 positional arguments but 1 was given
•有关*args和**kwargs两者之间的区别和其他扩展用法 ◦*args就是一个无名参数的集合,没有位置形和对应性,参数集合可以理解为一个元组tuple
◦**kwargs可以看作是一组由关键字参数组成的字典集合
◦由下面的例子可以看出,在混合或非混合使用的场景中,两种参数会自动进行分解形成相应的数据类型
◦
def test(*args,**kwargs):
print('args = ',args)
print('kwargs = ',kwargs)
print('--------------')
test(1,2,3,4)
test(a=1,b=2,c=3)
test(1,2,3,4,a=1,b=2,c=3)
test('a',None,3,a='qq',b=2,c=9)
args = (1, 2, 3, 4)
kwargs = {}
--------------
args = ()
kwargs = {'a': 1, 'b': 2, 'c': 3}
--------------
args = (1, 2, 3, 4)
kwargs = {'a': 1, 'b': 2, 'c': 3}
--------------
args = ('a', None, 3)
kwargs = {'a': 'qq', 'b': 2, 'c': 9}
--------------
# 将一串字符转变为一个元组tuple
def aas(x,*args):
print(x)
print(args)
aas(1,2,3,4,5,6,7,'a','aa','scd')
1
(2, 3, 4, 5, 6, 7, 'a', 'aa', 'scd')
# 使用**args 创建一个字典
def gen_dict(**kwargs):
return kwargs
dict1 = gen_dict(a=1,b=2,c=3,name='jack')
print(dict1)
{'a': 1, 'b': 2, 'c': 3, 'name': 'jack'}
最后,Python参数的定义形式虽然种类不是很多,但是使用时,尤其混合使用时一定要注意顺序。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx