python进阶教程之函数参数的多种传递方法


Posted in Python onAugust 30, 2014

我们已经接触过函数(function)的参数(arguments)传递。当时我们根据位置,传递对应的参数。我们将接触更多的参数传递方式。

回忆一下位置传递:

def f(a,b,c):

    return a+b+c
print(f(1,2,3))

在调用f时,1,2,3根据位置分别传递给了a,b,c。

关键字传递

有些情况下,用位置传递会感觉比较死板。关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。依然沿用上面f的定义,更改调用方式:

print(f(c=3,b=2,a=1))

关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:

print(f(1,c=3,b=2))

参数默认值

在定义函数的时候,使用形如a=19的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值。

def f(a,b,c=10):

    return a+b+c
print(f(3,2))

print(f(3,2,1))

在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.

第二次调用函数的时候,c被赋值为1,不再使用默认值。

包裹传递

在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。

下面是包裹位置传递的例子:

def func(*name):

    print type(name)

    print name
func(1,4,6)

func(5,6,7,1,2,3)

两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。

为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。

下面是包裹关键字传递的例子:

def func(**dict):

    print type(dict)

    print dict
func(a=1,b=9)

func(m=2,n=1,c=11)

与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。

包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。

解包裹

*和**,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:

def func(a,b,c):

    print a,b,c
args = (1,3,4)

func(*args)

在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有*会是什么后果?)

相应的,也存在对词典的解包裹,使用相同的func定义,然后:

dict = {'a':1,'b':2,'c':3}

func(**dict)

在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
 
混合

在定义或者调用参数时,参数的几种传递方式可以混合。但在过程中要小心前后顺序。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字,并且根据上面所说的原理细细分辨。

注意:请注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。

总结

关键字,默认值,

包裹位置,包裹关键字

解包裹

Python 相关文章推荐
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
python实现聚类算法原理
Feb 12 Python
Python中按值来获取指定的键
Mar 04 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
python 读取修改pcap包的例子
Jul 23 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
python禁用键鼠与提权代码实例
Aug 16 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
python查询MySQL将数据写入Excel
Oct 29 Python
python进阶教程之模块(module)介绍
Aug 30 #Python
Python中的闭包实例详解
Aug 29 #Python
python进阶教程之文本文件的读取和写入
Aug 29 #Python
Python中__call__用法实例
Aug 29 #Python
python进阶教程之词典、字典、dict
Aug 29 #Python
python字符串排序方法
Aug 29 #Python
python基础教程之对象和类的实际运用
Aug 29 #Python
You might like
PHP图片上传类带图片显示
2006/11/25 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python中random模块用法实例分析
2015/05/19 Python
星球大战与Python之间的那些事
2016/01/07 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
python如何建立全零数组
2020/07/19 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
html5的localstorage详解
2017/05/09 HTML / CSS
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
李宁官方网店:中国运动品牌
2017/11/02 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
买房委托公证书
2014/04/08 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
出纳岗位职责范本
2015/03/31 职场文书
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技