Python函数中参数类型(3)

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/709b3d11389848ad9aab8e6835d33ada.html