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计算书页码的统计数字问题实例
Sep 26 Python
Python实现批量下载图片的方法
Jul 08 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
Python内置模块logging用法实例分析
Feb 12 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
django之自定义软删除Model的方法
Aug 14 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
Python函数调用追踪实现代码
Nov 27 Python
Python中过滤字符串列表的方法
Dec 22 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可逆加密/解密函数分享
2012/09/25 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
javascript 新浪背投广告实现代码
2009/07/07 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
pytorch进行上采样的种类实例
2020/02/18 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
医学毕业生自我鉴定
2013/10/30 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
现金出纳岗位职责
2014/03/15 职场文书
2014最新离职证明范本
2014/09/12 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python