跟老齐学Python之总结参数的传递


Posted in Python onOctober 10, 2014

就前面所讲,函数的基本内容已经完毕。但是,函数还有很多值得不断玩味的细节。这里进行阐述。

参数的传递

python中函数的参数通过赋值的方式来传递引用对象。下面总结通过总结常见的函数参数定义方式,来理解参数传递的流程。

def foo(p1,p2,p3,...)

这种方式最常见了,列出有限个数的参数,并且彼此之间用逗号隔开。在调用函数的时候,按照顺序以此对参数进行赋值,特备注意的是,参数的名字不重要,重要的是位置。而且,必须数量一致,一一对应。第一个对象(可能是数值、字符串等等)对应第一个参数,第二个对应第二个参数,如此对应,不得偏左也不得偏右。

>>> def foo(p1,p2,p3):

...     print "p1==>",p1

...     print "p2==>",p2

...     print "p3==>",p3

... 

>>> foo("python",1,["qiwsir","github","io"])    #一一对应地赋值

p1==> python

p2==> 1

p3==> ['qiwsir', 'github', 'io']
>>> foo("python")

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: foo() takes exactly 3 arguments (1 given)    #注意看报错信息
>>> foo("python",1,2,3)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: foo() takes exactly 3 arguments (4 given)    #要求3个参数,实际上放置了4个,报错

 def foo(p1=value1,p2=value2,...)

这种方式比前面一种更明确某个参数的赋值,貌似这样就不乱子了,很明确呀。颇有一个萝卜对着一个坑的意味。

还是上面那个函数,用下面的方式赋值,就不用担心顺序问题了。

>>> foo(p3=3,p1=10,p2=222)

p1==> 10

p2==> 222

p3==> 3

 也可以采用下面的方式定义参数,给某些参数有默认的值

>>> def foo(p1,p2=22,p3=33):    #设置了两个参数p2,p3的默认值

...     print "p1==>",p1

...     print "p2==>",p2

...     print "p3==>",p3

... 

>>> foo(11)     #p1=11,其它的参数为默认赋值

p1==> 11

p2==> 22

p3==> 33

>>> foo(11,222)     #按照顺序,p2=222,p3依旧维持原默认值

p1==> 11

p2==> 222

p3==> 33

>>> foo(11,222,333)  #按顺序赋值

p1==> 11

p2==> 222

p3==> 333
>>> foo(11,p2=122)

p1==> 11

p2==> 122

p3==> 33
>>> foo(p2=122)     #p1没有默认值,必须要赋值的,否则报错

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: foo() takes at least 1 argument (1 given)

 def foo(*args)

这种方式适合于不确定参数个数的时候,在参数args前面加一个*,注意,仅一个哟。

>>> def foo(*args):         #接收不确定个数的数据对象

...     print args

... 

>>> foo("qiwsir.github.io") #以tuple形式接收到,哪怕是一个

('qiwsir.github.io',)

>>> foo("qiwsir.github.io","python")

('qiwsir.github.io', 'python')

 上一讲中已经有例子说明,可以和前面的混合使用。此处不赘述。

def foo(**args)

这种方式跟上面的区别在于,必须接收类似arg=val形式的。

>>> def foo(**args):    #这种方式接收,以dictionary的形式接收数据对象

...     print args

...
>>> foo(1,2,3)          #这样就报错了

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: foo() takes exactly 0 arguments (3 given)
>>> foo(a=1,b=2,c=3)    #这样就可以了,因为有了键值对

{'a': 1, 'c': 3, 'b': 2}

 下面来一个综合的,看看以上四种参数传递方法的执行顺序

>>> def foo(x,y=2,*targs,**dargs):

...     print "x==>",x

...     print "y==>",y

...     print "targs_tuple==>",targs

...     print "dargs_dict==>",dargs

...
>>> foo("1x")

x==> 1x

y==> 2

targs_tuple==> ()

dargs_dict==> {}
>>> foo("1x","2y")

x==> 1x

y==> 2y

targs_tuple==> ()

dargs_dict==> {}
>>> foo("1x","2y","3t1","3t2")

x==> 1x

y==> 2y

targs_tuple==> ('3t1', '3t2')

dargs_dict==> {}
>>> foo("1x","2y","3t1","3t2",d1="4d1",d2="4d2")

x==> 1x

y==> 2y

targs_tuple==> ('3t1', '3t2')

dargs_dict==> {'d2': '4d2', 'd1': '4d1'}

 通过上面的例子,看官是否看出什么名堂了呢?

Python 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
python回溯法实现数组全排列输出实例分析
Mar 17 Python
python中dir函数用法分析
Apr 17 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
利用python查看数组中的所有元素是否相同
Jan 08 Python
python time.strptime格式化实例详解
Feb 03 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
用Python实现屏幕截图详解
Jan 22 Python
跟老齐学Python之变量和参数
Oct 10 #Python
跟老齐学Python之重回函数
Oct 10 #Python
跟老齐学Python之Python文档
Oct 10 #Python
跟老齐学Python之大话题小函数(2)
Oct 10 #Python
跟老齐学Python之大话题小函数(1)
Oct 10 #Python
Python警察与小偷的实现之一客户端与服务端通信实例
Oct 09 #Python
python中二维阵列的变换实例
Oct 09 #Python
You might like
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
python中zip和unzip数据的方法
2015/05/27 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python实现基本线性数据结构
2016/08/22 Python
python重试装饰器的简单实现方法
2019/01/31 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
元旦晚会感言
2014/03/12 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
期末学生评语大全
2014/04/24 职场文书
企业整改报告范文
2014/11/08 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Flask response响应的具体使用
2021/07/15 Python
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python