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 解析html之BeautifulSoup
Jul 07 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
python函数中将变量名转换成字符串实例
May 11 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
Python tkinter实现日期选择器
Feb 22 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对象类型判断
2008/08/27 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
jQuery 表格工具集
2010/04/25 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
Python读写ini文件的方法
2015/05/28 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
pycharm实现猜数游戏
2020/12/07 Python
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
给同学的道歉信
2014/01/16 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
争先创优心得体会
2014/09/12 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
公司慰问信范文
2015/03/23 职场文书
怒海潜将观后感
2015/06/11 职场文书
小学数学教学反思范文
2016/02/16 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript