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代理抓取并验证使用多线程实现
May 03 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
python基于itchat实现微信群消息同步机器人
Feb 27 Python
详解Golang 与python中的字符串反转
Jul 21 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
详解用python生成随机数的几种方法
Aug 04 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
Python下opencv库的安装过程及问题汇总
Jun 11 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 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+mysql一个名片库程序
2006/10/09 PHP
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
清空上传控件input file的值
2010/07/03 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
Python简单读取json文件功能示例
2017/11/30 Python
将python代码和注释分离的方法
2018/04/21 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Django中使用Celery的教程详解
2018/08/24 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
幼儿园新年寄语
2014/04/03 职场文书
文明寄语大全
2014/04/11 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
毕业生求职信
2014/06/10 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server