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 相关文章推荐
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
Python 实现随机数详解及实例代码
Apr 15 Python
python Crypto模块的安装与使用方法
Dec 21 Python
pytorch构建网络模型的4种方法
Apr 13 Python
Python3.5装饰器典型案例分析
Apr 30 Python
基于Python获取城市近7天天气预报
Nov 26 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
django admin后管定制-显示字段的实例
Mar 11 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 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/07/10 PHP
linux iconv方法的使用
2011/10/01 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
详解javascript常用工具类的封装
2018/01/30 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python的exec、eval使用分析
2017/12/11 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
基于python的Paxos算法实现
2019/07/03 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Django日志及中间件模块应用案例
2020/09/10 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
清华大学自主招生自荐信
2014/01/29 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
八项规定对照检查材料
2014/08/31 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
2015感人爱情寄语
2015/02/26 职场文书
学校运动会通讯稿
2015/07/18 职场文书
python Tkinter的简单入门教程
2021/04/11 Python