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解析模块(ConfigParser)使用方法
Dec 10 Python
Python基于pygame实现的font游戏字体(附源码)
Nov 11 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
解析Python的缩进规则的使用
Jan 16 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
python opencv调用笔记本摄像头
Aug 28 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
Django-rest-framework中过滤器的定制实例
Apr 01 Python
Python如何操作docker redis过程解析
Aug 10 Python
python 发送邮件的四种方法汇总
Dec 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
php session和cookie使用说明
2010/04/07 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
Python线程的两种编程方式
2015/04/14 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
银行实习自我鉴定
2013/10/12 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
终止劳动合同协议书
2014/04/14 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
签字仪式主持词
2015/07/03 职场文书
会议简报格式范文
2015/07/20 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技