python中函数传参详解


Posted in Python onJuly 03, 2016

一、参数传入规则

可变参数允许传入0个或任意个参数,在函数调用时自动组装成一个tuple;

关键字参数允许传入0个或任意个参数,在函数调用时自动组装成一个dict;

1. 传入可变参数:

def calc(*numbers):
   sum = 0
   for n in numbers:
     sum = sum + n * n
   return sum

以上定义函数,使用如下:

传入多个参数,

calc(1, 2, 3, 4)
30 #函数返回值

传入一个列表,

nums = [1, 2, 3]
calc(*nums) # 通过 * 将list中的元素作为可变参数传入函数
14 # 函数返回值

2.传入关键字参数:

>>> def person(name, age, **kw):
...   print('name: ', name, 'age: ', age, 'other: ', kw)
... 
>>> 
>>> person('luhc', 24, city='Guangzhou')
name: luhc age: 24 other: {'city': 'Guangzhou'}

同样,可以将预先定义的dict作为参数传入以上函数:

>>> info = {'city': 'Guangzhou', 'job': 'engineer'}
>>> 
>>> person('luhc', 24, **info)
name: luhc age: 24 other: {'city': 'Guangzhou', 'job': 'engineer'}

注意: 函数person 获得的是参数 info 的一份拷贝,在函数内修改不会影响 info 的值

3. 在关键字参数中,可以限制关键字参数的名字:

# 通过 * 分割,以指定关键字参数名
>>> def person(name, age, *, city, job):
...   print('name: ', name, 'age: ', age, 'city: ', city, 'job: ', job)
... 
>>> 
>>> person('luhc', 24, city='Guangzhou', job='engineer')
name: luhc age: 24 city: Guangzhou job: engineer

# 如果传入参数中,存在参数名不在定义的范围内,将抛出异常
>>> person('luhc', 24, city='Guangzhou', jobs='engineer')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: person() got an unexpected keyword argument 'jobs'
>>>

此外,如果函数中已经指定可变参数,则 * 可以省略,如下:

# 省略了用 * 作为分割,指定关键字参数名
>>> def person(name, age, *args, city, job):
...   print('name: ', name, 'age: ', age, 'args: ', args, 'city: ', city, 'job: ', job)  
... 
>>> 
>>> person('luhc', 24, 'a', 'b', city='Guangz', job='engineer')
name: luhc age: 24 args: ('a', 'b') city: Guangz job: engineer
>>> 
# 同样,如果传入了关键字参数未指定的参数名,则抛出异常
>>> person('luhc', 24, 'a', 'b', city='Guangz', job='engineer', test='a')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: person() got an unexpected keyword argument 'test'
>>>

二、参数组合使用:

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

def f1(a, b, c=0, *args, **kw):
  print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
  print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

 以上就是本文给大家介绍的全部内容了,希望能够对大家理解Python的函数参数的传递有所帮助

Python 相关文章推荐
python实现巡检系统(solaris)示例
Apr 02 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
python得到电脑的开机时间方法
Oct 15 Python
使用PIL(Python-Imaging)反转图像的颜色方法
Jan 24 Python
python实践项目之监控当前联网状态详情
May 23 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
Python通过socketserver处理多个链接
Mar 18 Python
自学python用什么系统好
Jun 23 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 Python
Python正则表达式中flags参数的实例详解
Apr 01 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
Jul 02 #Python
Ruby元编程基础学习笔记整理
Jul 02 #Python
Python的爬虫程序编写框架Scrapy入门学习教程
Jul 02 #Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 #Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 #Python
python图片验证码生成代码
Jul 02 #Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 #Python
You might like
php判断字符以及字符串的包含方法属性
2008/08/30 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
短信提示使用 特效
2007/01/19 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
vue.js实现三级菜单效果
2019/10/19 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
python日志记录模块实例及改进
2017/02/12 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
Python占用的内存优化教程
2019/07/28 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
德国购买健身器材:AsVIVA
2017/08/09 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
大学自我鉴定范文
2013/12/26 职场文书
文明学生标兵事迹
2014/01/21 职场文书
拆迁委托协议书
2014/09/15 职场文书