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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
Python下的Mysql模块MySQLdb安装详解
Apr 09 Python
python实现中文输出的两种方法
May 09 Python
Python if语句知识点用法总结
Jun 10 Python
Python安装与基本数据类型教程详解
May 29 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
python打开使用的方法
Sep 30 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
浅谈Python中的字符串
Jun 10 Python
查看keras的默认backend实现方式
Jun 19 Python
Python非单向递归函数如何返回全部结果
Dec 18 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 define()函数以及defined()函数的用法详解
2013/06/05 PHP
9个比较实用的php代码片段
2016/03/15 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
js实现简易ATM功能
2020/10/27 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
详解Python中for循环的使用方法
2015/05/14 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
大学生职业生涯规划书模版
2013/12/30 职场文书
共产党员公开承诺书
2014/03/25 职场文书
年终晚会活动方案
2014/08/21 职场文书
竞选学委演讲稿
2014/09/13 职场文书
公司员工安全协议书
2014/11/21 职场文书
2019求职信大礼包
2019/05/15 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书