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 相关文章推荐
python获取糗百图片代码实例
Dec 18 Python
python基础教程之基本内置数据类型介绍
Feb 20 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
Python下Fabric的简单部署方法
Jul 14 Python
python爬虫使用cookie登录详解
Dec 27 Python
使用Python写一个小游戏
Apr 02 Python
python分割一个文本为多个文本的方法
Jul 22 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 Python
python获取Linux发行版名称
Aug 30 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
Python使用Web框架Flask开发项目
Jun 01 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
PHP面向对象学习之parent::关键字
2017/01/18 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
Python中文件操作简明介绍
2015/04/13 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
大一自我鉴定范文
2013/10/04 职场文书
中秋节超市促销方案
2014/01/30 职场文书
人资专员岗位职责
2014/04/04 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
分享Python获取本机IP地址的几种方法
2022/03/17 Python