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中的readline()方法的使用
May 24 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
PyTorch和Keras计算模型参数的例子
Jan 02 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
Python小白垃圾回收机制入门
Jun 09 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
python 下载文件的几种方法汇总
Jan 06 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 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数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
js查找节点的方法小结
2015/01/13 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
Python实现的密码强度检测器示例
2017/08/23 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
英国精品买手店:Browns Fashion
2016/09/29 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
《狐假虎威》教学反思
2014/02/07 职场文书
教学评估实施方案
2014/03/16 职场文书
五好家庭事迹材料
2014/12/20 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang
公历12个月名称的由来
2022/04/12 杂记