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读取注册表中值的方法
Apr 08 Python
盘点提高 Python 代码效率的方法
Jul 03 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
Ubuntu下安装PyV8
Mar 13 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
python实现移位加密和解密
Mar 22 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 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设计模式 Composite (组合模式)
2011/06/26 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
PHP编程风格规范分享
2014/01/15 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
php微信支付接口开发程序
2016/08/02 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
Prototype String对象 学习
2009/07/19 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
Python中的Numpy矩阵操作
2018/08/12 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
书法比赛获奖感言
2014/02/10 职场文书
教学评估实施方案
2014/03/16 职场文书
文秘个人求职信范文
2014/04/22 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
OpenCV全景图像拼接的实现示例
2021/06/05 Python