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 Matplotlib库入门指南
May 18 Python
python append、extend与insert的区别
Oct 13 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
python实现月食效果实例代码
Jun 18 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
详解python算法常用技巧与内置库
Oct 17 Python
OpenCV+python实现膨胀和腐蚀的示例
Dec 21 Python
利用python做数据拟合详情
Nov 17 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
php实现的AES加密类定义与用法示例
2018/01/29 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
JS实现网页端猜数字小游戏
2020/03/06 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Python AES加密实例解析
2018/01/18 Python
Django 路由系统URLconf的使用
2018/10/11 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
职业规划书如何设计?
2014/01/09 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸
Python实现视频自动打码的示例代码
2022/04/08 Python
TS 类型收窄教程示例详解
2022/09/23 Javascript