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 ljust rjust center输出
Sep 06 Python
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
跟老齐学Python之重回函数
Oct 10 Python
Python中的__new__与__init__魔术方法理解笔记
Nov 08 Python
分享几道你可能遇到的python面试题
Jul 24 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
深入分析python中整型不会溢出问题
Jun 18 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
python实现在线翻译功能
Mar 03 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 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中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
JavaScript中的变量作用域介绍
2014/12/31 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
python使用递归的方式建立二叉树
2019/07/03 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
Java如何获得ResultSet的总行数
2016/09/03 面试题
UNIX命令速查表
2012/03/10 面试题
化验室技术员岗位职责
2013/12/24 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
企业授权委托书范本
2014/04/02 职场文书
小学生作文评语大全
2014/04/21 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python