ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

可变长参数

2022-03-27 21:04:14  阅读:124  来源: 互联网

标签:kwargs sum args test 参数 可变 print


含义:当我们不确定要传入参数的具体个数的时候,可以选择在定义函数的时候,添加不定长参数。

print 函数代码示例:

a = 10
b = True
c = 1.1
d = "你好"
print(a)
print(a,b)
print(a,b,c)
print(a,b,c,d)

'''
输出结果:
10
10 True
10 True 1.1
10 True 1.1 你好
'''

应用场景:

# 计算两个数的和
def sum_test(a,b):
    result = a + b
    return result

sum = sum_test(45,25)
print(sum)
# 输出结果:70

# 根据情况计算传入的数值的和(可运用可变长参数args)
def sum_test(a,b,*args): # *args是比较规范的可变长参数
    print(" a = ",a)
    print(" b = ",b)
    print(" args = ",args)

sum_test(45,12,85,26,70)
"""
输出结果:
 a =  45
 b =  12
 args =  (85, 26, 70) # 可变长参数将多余的元素都输出为元组
"""

定义格式1:

def 函数名称(参数1,参数2,* 可变长参数):

重点:

1、除去必要的参数之外,多余的参数都被可变长参数接收,并且封装成元组;

2、可变长参数可以不传,输出的是空元组;

3、可变长参数只能放在参数列表后面;

4、使用场景:当我们不确定传入的参数类型为单个的时候

代码示例:

# 根据情况计算传入的数值的和(可运用可变长参数args)
def sum_test(a,b,*args): # *args是比较规范的可变长参数

    # 计算a,b的值
    result = a + b
    # 取出可变长参数args的值(通过循环从元组取值)
    for i in args:
        result += i

    return result

print(sum_test(45,12,85,26,70))

# 输出结果:238

定义格式2:

def 函数名称(参数1,参数2,** kwargs)

重点:

1、kwargs 接收的参数类型为:参数名称 = 参数值(以字典的形式进行封装)

2、该参数可不传递,输出是空字典;

3、该类型可变长参数只能放在参数列表的最后面;

代码示例:

# kwargs可变长参数
def sum_test(a,b,**kwargs):
    print(a,b,kwargs)

sum_test(25,58,name="美女",sex="女") 
# 输出结果:25 58 {'name': '美女', 'sex': '女'}

# args和kwargs混用
def sum_test(a,b,*args,**kwargs):
    print(a,b,args,kwargs)

sum_test(25,58,452,5401,5413,name="美女")
# 输出结果:25 58 (452, 5401, 5413) {'name': '美女'}

拆包

代码示例:

# 定义一个含有可变长参数的函数
def test(a,b,*args,**kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)

A = (1,3,5,6)
B = {"姓名":"美丽"}
# 自动拆包,将元组拆分成一个个元素,将字典拆成键值对传递进去
test(11,12,13,14,15,*A,**B) 
# test(11,12,13,14,15,1,3,5,6,姓名="美丽")
"""
输出结果:
11
12
(13, 14, 15, 1, 3, 5, 6)
{'姓名': '美丽'}
"""

应用场景:假设我们需要处理用户信息,我们设置的函数需要键值对导入信息,而用户的信息有可能是别的用户给我们的,这些数据有可能是一个字典,而我们的函数需要拆分这个字典,取得键值对,放入函数当中,我们可以把这个字典用kwargs可变长参数的方法(即在字典前加两个 * 号)来进行拆包,再导入我们的函数中。

标签:kwargs,sum,args,test,参数,可变,print
来源: https://www.cnblogs.com/Pork-belly8/p/16064373.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有