Python中函数的参数传递与可变长参数介绍


Posted in Python onJune 30, 2015

1.Python中也有像C++一样的默认缺省函数

def foo(text,num=0):

    print text,num
foo("asd")  #asd 0

foo("def",100)  #def 100

定义有默认参数的函数时,这些默认值参数 位置必须都在非默认值参数后面。

调用时提供默认值参数值时,使用提供的值,否则使用默认值。

2.Python可以根据参数名传参数

def foo(ip,port):

    print "%s:%d" % (ip,port)
foo("192.168.1.0",3306) #192.168.1.0:3306

foo(port=8080,ip="127.0.0.1")   #127.0.0.1:8080

第4行,没有指定参数名,按照顺序传参数。

第5行,指定参数名,可以按照参数名称传参数。

3.可变长度参数

#coding:utf-8       #设置python文件的编码为utf-8,这样就可以写入中文注释

def foo(arg1,*tupleArg,**dictArg):

    print "arg1=",arg1  #formal_args

    print "tupleArg=",tupleArg  #()

    print "dictArg=",dictArg    #[]

foo("formal_args")

上面函数中的参数,tupleArg前面“*”表示这个参数是一个元组参数,从程序的输出可以看出,默认值为();dicrtArg前面有“**”表示这个字典参数(键值对参数)。可以把tupleArg、dictArg看成两个默认参数。多余的非关键字参数,函数调用时被放在元组参数tupleArg中;多余的关键字参数,函数调用时被放字典参数dictArg中。

下面是可变长参数的一些用法:

#coding:utf-8       #设置python文件的编码为utf-8,这样就可以写入中文注释

def foo(arg1,arg2="OK",*tupleArg,**dictArg):

    print "arg1=",arg1

    print "arg2=",arg2

    for i,element in enumerate(tupleArg):

        print "tupleArg %d-->%s" % (i,str(element))

    for  key in dictArg:

        print "dictArg %s-->%s" %(key,dictArg[key])
myList=["my1","my2"]

myDict={"name":"Tom","age":22}

foo("formal_args",arg2="argSecond",a=1)

print "*"*40

foo(123,myList,myDict)

print "*"*40

foo(123,rt=123,*myList,**myDict)

输出为:

Python中函数的参数传递与可变长参数介绍

从上面的程序可以看出:

(1)如代码第16行。

 参数中如果使用“*”元组参数或者“**”字典参数,这两种参数应该放在参数列表最后。并且“*”元组参数位于“**”字典参数之前。

 关键字参数rt=123,因为函数foo(arg1,arg2="OK",*tupleArg,**dictArg)中没有rt参数,所以最后也归到字典参数中。

(2)如代码第14行。

元组对象前面如果不带“*”、字典对象如果前面不带“**”,则作为普通的对象传递参数。

多余的普通参数,在foo(123,myList,myDict)中,123赋给参数arg1,myList赋给参数arg2,多余的参数myDict默认为元组赋给myList。

Python 相关文章推荐
用python分割TXT文件成4K的TXT文件
May 23 Python
python中cPickle用法例子分享
Jan 03 Python
Python模拟登录12306的方法
Dec 30 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
详解如何使用Python编写vim插件
Nov 28 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
python之生产者消费者模型实现详解
Jul 27 Python
django实现日志按日期分割
May 21 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 Python
python实现文件快照加密保护的方法
Jun 30 #Python
Python实现高效求解素数代码实例
Jun 30 #Python
python实现DES加密解密方法实例详解
Jun 30 #Python
python实现的系统实用log类实例
Jun 30 #Python
python实现在windows服务中新建进程的方法
Jun 30 #Python
python实现线程池的方法
Jun 30 #Python
python实现的简单FTP上传下载文件实例
Jun 30 #Python
You might like
PHP原理之异常机制深入分析
2010/08/08 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php算法实例分享
2015/07/14 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
js面向对象的写法
2016/02/19 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
简单谈谈Python流程控制语句
2016/12/04 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
python 实现客户端与服务端的通信
2020/12/23 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
日语专业毕业生自荐信
2013/11/11 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
python实现网络五子棋
2021/04/11 Python
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL