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实现线程池代码分享
Jun 21 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
Python决策树分类算法学习
Dec 22 Python
解决python3 json数据包含中文的读写问题
May 10 Python
python 将json数据提取转化为txt的方法
Oct 26 Python
Python队列、进程间通信、线程案例
Oct 25 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
django 外键创建注意事项说明
May 20 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
Jun 04 Python
python获取整个网页源码的方法
Aug 03 Python
Python实现我的世界小游戏源代码
Mar 02 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
php简单防盗链实现方法
2015/07/29 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
详解VUE 数组更新
2017/12/16 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
python进行两个表格对比的方法
2018/06/27 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python实现多进程通信实例分析
2019/09/01 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
如何提高MySql的安全性
2014/06/19 面试题
护理不良事件检讨书
2014/02/06 职场文书
个人安全生产责任书
2014/07/28 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
2015年母亲节寄语
2015/03/23 职场文书
逃出克隆岛观后感
2015/06/09 职场文书