Python函数中定义参数的四种方式


Posted in Python onNovember 30, 2014

Python中函数参数的定义主要有四种方式:

1. F(arg1,arg2,…)

这是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等
的值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应,也就是说第一个形参对应这第一个实参。例如:

def a(x,y):print x,y

调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错。

2. F(arg1,arg2=value2,…)

这种方式就是第一种的改进版,提供了默认值,例如:

def a(x,y=3):print x,y

调用该函数,a(1,2)同样还是x取1,y取2,但是如果a(1),则不会报错了,这个时候x还是1,y则为默认的3。上面这俩种方式,还可以更换参数位置,比如a(y=4,x=3)用这种形式也是可以的。

3. F(*arg1)

上面两种方式是有多少个形参,就传进去多少个实参,但有时候会不确定有多少个参数,则此时第三种方式就比较有用,它以一个*加上形参名的方式来表示这个函
数的实参个数不定,可能为0个也可能为n个。注意一点是,不管有多少个,在函数内部都被存放在以形参名为标识符的元组中。

def a(*x):print x
>>> a(1,2,3)
(1, 2, 3)
>>> a(x=1,y=2,z=3)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: a() got an unexpected keyword argument 'x'

4. F(**arg1)

形参名前加两个*表示,参数在函数内部将被存放在以形式名为标识符的dictionary中,这时调用函数的方法则需要采用arg1=value1,arg2=value2这样的形式。

def a(**x):print x
>>> a(x=1,y=2,z=3)
{'y': 2, 'x': 1, 'z': 3} #存放在字典中
>>> a(1,2,3) #这种调用则报错
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: a() takes exactly 0 arguments (3 given)
Python 相关文章推荐
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Python 获取 datax 执行结果保存到数据库的方法
Jul 11 Python
详解Django CAS 解决方案
Oct 30 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
使用numpy nonzero 找出非0元素
May 14 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 Python
Python 自动补全(vim)
Nov 30 #Python
给Python IDLE加上自动补全和历史功能
Nov 30 #Python
让 python 命令行也可以自动补全
Nov 30 #Python
Python lambda和Python def区别分析
Nov 30 #Python
Python内置函数之filter map reduce介绍
Nov 30 #Python
Python Queue模块详解
Nov 30 #Python
Python socket C/S结构的聊天室应用实现
Nov 30 #Python
You might like
destoon二次开发常用数据库操作
2014/06/21 PHP
php实现将Session写入数据库
2015/07/26 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
基于js disabled=&quot;false&quot;不起作用的解决办法
2013/06/26 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
详解javascript高级定时器
2015/12/31 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
Python中的urllib模块使用详解
2015/07/07 Python
Python Flask-web表单使用详解
2017/11/18 Python
python制作填词游戏步骤详解
2019/05/05 Python
python 字典套字典或列表的示例
2019/12/16 Python
python3处理word文档实例分析
2020/12/01 Python
java关于string最常出现的面试题整理
2021/01/18 Python
numpy实现RNN原理实现
2021/03/02 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
化学专业毕业生自荐信
2013/11/15 职场文书
QA工程师岗位职责
2013/11/20 职场文书
银行批评与自我批评
2014/02/10 职场文书
开业庆典主持词
2014/03/21 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
关于安全的演讲稿
2014/05/09 职场文书
十七岁的单车观后感
2015/06/12 职场文书
工作简报格式范文
2015/07/21 职场文书
《失物招领》教学反思
2016/02/20 职场文书