设为首页 收藏本站
查看: 730|回复: 0

[经验分享] Python函数参数总结

[复制链接]

尚未签到

发表于 2015-4-21 13:26:50 | 显示全部楼层 |阅读模式
  作为一个没有系统学习过python,却要与之日日相对看源码的人,真尼玛痛苦啊。。。经常看到**kws之类的,心中狂虐:这啥?指针的指针?!T^T
  昨天看《Python核心编程》的时候,刚好看到了函数部分,于是顺势将目前接触到的集中参数类型都总结一下吧^^
  总的来说,除去普通的normal args,python中比较特别的函数参数有:关键字参数、默认参数、非关键字可变长参数(元组)、关键字可变长参数(字典),下面将结合例子进行介绍。
  关键字参数:调用时指定参数的名称,且与函数声明时的参数名称一致。使用关键字参数允许函数调用时参数的顺序与声明时不一致,仅根据参数的指定进行赋值。例:



# 函数定义
def foo(x, y):
print 'x is %s' % x
print 'y is %s' % y
if __name__ == '__main__':
# 标准调用
foo(1, 2)
# 关键字调用
foo(y = 1, x = 2)
  在标准调用中,x和y依次为1和2;在关键字调用中,x和y的值根据名字指定而与顺序无关。



# 标准调用输出
x is 1
y is 2
# 关键字调用输出
x is 2
y is 1
  
  默认参数:在函数声明时,指定形参的默认值,调用时可不传入改参数(使用默认值)。例:



def tax(cost, rate = 0.17):
print cost * (1 + rate)
if __name__ == '__main__':
# rate使用默认值0.17
tax(1000)
# rate指定为0.05
tax(1000, 0.05)
  使用默认值时,rate为0.17,结果为1170;在指定参数rate时,rate为0.05,结果为1050。



# tax(1000)的输出
1170.0
# tax(1000, 0.05)的输出
1050.0
  
  非关键字可变长参数(元组):“非关键字”“可变长”顾名思义是允许在调用时传入多个“非关键字”参数,python会将这些多出来的参数放入一个元组中。例:



# 定义函数,其中*theRest为非关键字可变长参数
def tupleVarArgs(arg1, arg2='defaultB', *theRest):
print 'formal arg 1: ', arg1
print 'formal arg 2: ', arg2
for eachXtrArg in theRest:
print 'another arg: ', eachXtrArg
  我们采用多种调用方式来查看结果,从而理解非关键字可变长参数的使用:



>>> tupleVarArgs('abc')
formal arg 1:  abc
formal arg 2:  defaultB

>>> tupleVarArgs('abc', 'def')
formal arg 1:  abc
formal arg 2:  def
>>> tupleVarArgs('abc', 'def', 'xyz', 123.4)
formal arg 1:  abc
formal arg 2:  def
another arg:  xyz
another arg:  123.4
  
  关键字可变长参数(字典):“关键字”“可变长”顾名思义是允许在调用时传入多个“关键字”参数,python会将这些多出来的放入一个字典中。需要注意的是,关键字变量参数应该为函数定义的最后一个参数,带**。例:



# 定义函数,其中**theRest为关键字可变长参数
def dictVarArgs(arg1, arg2='defaultB', **theRest):
print 'formal arg 1: ', arg1
print 'formal arg 2: ', arg2
for eachXtrArg in theRest.keys():
print 'Xtra arg %s: %s' % (eachXtrArg, str(theRest[eachXtrArg]))
  我们采用多种调用方式来查看结果,从而理解关键字可变长参数的使用:



>>> dictVarArgs('abc')
formal arg 1:  abc
formal arg 2:  defaultB
>>> dictVarArgs('abc', 'def')
formal arg 1:  abc
formal arg 2:  def
# a=1和b='aha'即为关键字可变参数,他们会被放入theRest字典
>>> dictVarArgs('abc', 'def', a=1, b='aha')
formal arg 1:  abc
formal arg 2:  def
Xtra arg a: 1
Xtra arg b: aha
# 全部采用关键字参数,但只有a和b是可变的,会被放入theRest
>>> dictVarArgs(arg2='def', a=1, b='aha', arg1='put at the last')
formal arg 1:  put at the last
formal arg 2:  def
Xtra arg a: 1
Xtra arg b: aha
# 这次使用了arg2的默认值
>>> dictVarArgs('one', a=1, b='aha', name=('yuki', 'lau'))
formal arg 1:  one
formal arg 2:  defaultB
Xtra arg a: 1
Xtra arg b: aha
Xtra arg name: ('yuki', 'lau')
  
  注意
  当非关键字可变长参数和关键字可变长参数出现在同一个函数中时,他们应当遵守如下的顺序约定:



def newfoo(normal_arg1, normal_arg2, *non-keywords, ** keywords):
pass
  当然,你也可以直接向函数中传入元组和字典对象,如:



>>> newfoo(2, 4, *(6, 8), **{'foo': 10, 'bar': 12})
  也可以来个“混搭”,孤立的可变长参数将会被放入对应的tuple或dict中,如:



>>> newfoo(2, 4, 3, x=4, y=5, *aTuple, **aDict)
  在这个例子中,参数3会被放入aTuple,参数x=4和y=5会被放入aDict
  
  当然关于Python函数的参数问题还有很多,本文仅仅介绍几种常用的情况,仅做个简单的了解和参考。
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59279-1-1.html 上篇帖子: Python IDLE入门 下篇帖子: 使用python对txt格式的小说进行处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表