Python可变长参数

七月 上海 | 高性能计算之GPU CUDA培训

7月27-29日 640?wx_fmt=jpeg 三天密集式学习  快速带你入门 阅读全文 >


正文共982个字,预计阅读时间6分钟。


引言


假如我们已经从Excel中读取到了一列数据,比如说是一队人的分数。我们尝试用Python来编写一个求总分的函数。


如果事先已知人数

如果人数实现已知,比如说只有两个人的时候,我们可能会编写如下函数:


1def sum1(a,b):
2print('a = ',a)
3print('b = ',b)
4print('sum = ',a+b)
5
6# a = 10
7# sum1(a) # TypeError: sum1() missing 1 required positional argument: 'b'
8# b = 20
9# sum1(a,b)


这个函数的级别等同“hello world“。让我们来看下这个函数的参数。这个函数的这种参数称为必选参数。也就是活,你必须给函数sum1传递两个确定的参数,他才能输出正确结果。如果你只传递了一个,对不起,函数撂挑子不干了。而且会给你拽一句英文:


1TypeError: sum1() missing 1 required positional argument: 'b'


640?wx_fmt=jpeg


如果某人分数也已知


标题中”也“的意思是说,人数已知的同时某人分数也已知,比如为10。这时候也许你会编写出下面这样的函数:


1def sum2(a,b=10):
2print('a = ',a)
3print('b = ',b)
4print('sum = ',a+b)


这个时候,再遇到上一节的只传递一个函数的情况,函数就不会撂挑子了,而是会给出正确结果。


但是,转折来了:一般情况下,我们很有可能不知道我们到底从excel读取了多少个数据,而且一般数量还还不小,即使知道了也不能用上面的方式去写了。论括号里到底可以写多少个参数??


可变长参数


当函数参数不可知的时候,也许,就需要写一个可变长参数的函数了。


在Python中,有两种可变长常数可选,分别是:


  • 元组变长参数,参数名前面有一个*号

  • 字典变长参数,参数名前面有两个*号


我们分别来看一下。


元组变长参数


我们用元组变长参数重写一个上面的那个求总分的函数:


 1def sum3(*nums):
2print('nums: ',nums)
3sum = 0
4for num in nums:
5sum += num
6print('sum = ',sum)
7a = 11
8b = 22
9c = 33
10sum3(a,b,c)


运行下试试,结果如下:


1nums:  (11, 22, 33)
2sum =  66


可以看到输出的nums是被圆括号包含的三个数字,大家都知道,在Python中圆括号括起来的正是元组tuple(圆括号,元组......感觉名字还挺符合的,都是yuan)。


不定长参数,没有参数可不可以呢?


运行sum()试试看。


输出结果:


1nums:  ()
2sum =  0


字典可变长参数


我们用字典变长参数重写一个上面的那个求总分的函数:


1def sum4(a=0,**nums):
2print('nums: ',nums)
3sum = a
4for key in nums:
5sum += nums[key]
6print('sum = ',sum)
7sum4(a=11,b=22,c=33)


运行一下,输出结果如下:


1a =  11
2nums:  {'b': 22, 'c': 33}
3sum =  66


可以看到输出的nums是被花括号包含的三个数字,大家都知道,在Python中花括号括起来的正是字典。


字典可变长参数,或者叫关键字参数,允许你将不定长度的键值对, 作为参数传递给一个函数。


当然,与元组可变参数一样,这个参数也是可以为空的。


如果我们按照元组可变长参数的方式给sum4传递参数会发生什么呢?


比如我们运行下这么一句:


1sum4(a,b,c)


结果函数又撂挑子不干了,而且对你说了一句英语:


1TypeError: sum4() takes from 0 to 1 positional arguments but 3 were given


原文链接:https://www.jianshu.com/p/fe0eb1e90bb4


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

640?wx_fmt=jpeg

大家都在看

640.png?

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值