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

[经验分享] Python中的函数(三)

[复制链接]

尚未签到

发表于 2015-4-20 13:00:16 | 显示全部楼层 |阅读模式
  Python中的函数(三)
  在前面两篇文章中已经探讨了函数的一些相关用法,下面一起来了解一下函数参数类型的问题。在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格进行规定的。然而在Python中函数参数定义和传递的方式相比而言就灵活多了。
  一.函数参数的类型
  之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求。而在Python中还有一种是通过参数名字来匹配的,这样一来,不需要严格按照参数定义时的位置来传递参数,这种参数叫做关键字参数。下面举两个例子:



def display(a,b):
print a
print b
display('hello','world')
  这段程序是想输出'hello world',可以正常运行。如果像下面这样写的话,结果可能就不是预期的样子了:



def display(a,b):
print a
print b
#这样会报错
display('hello')
#这样会输出'world hello'
display('world','hello')
  可以看出在Python中默认的是采用位置参数来传参。这样调用函数必须严格按照函数定义时的参数个数和位置来传参,否则将会出现预想不到的结果。下面这段代码采用的就是关键字参数:



def display(a,b):
print a
print b
#下面2句达到的效果是相同的
display(a='world',b='hello')
display(b='hello',a='world')
  可以看到通过指定参数名字传递参数的时候,参数位置对结果是没有影响的。
  关键字参数最厉害的地方在于它能够给函数参数提供默认值。比如:



def display(a='hello',b='wolrd'):
print a+b
display()
display(b='world')
display(a='hello')
display('world')
  在上面的代码中,分别给a和b指定了默认参数,即如果不给a或者b传递参数时,它们就分别采用默认值。在给参数指定了默认值后,如果传参时不指定参数名,则会从左到右依次进行传参,比如display('world')没有指定'world'是传递给a还是b,则默认从左向右匹配,即传递给a。
  使用默认参数固然方便,但是有一点要非常注意,在重复调用函数时默认形参会继承之前一次调用结束之后该形参的值。下面看一个例子:



def insert(a,L=[]):
L.append(a)
print L
insert('hello')
insert('world')
  其运行结果为:
DSC0000.jpg
  二.任意个数参数
  一般情况下我们在定义函数时,函数参数的个数是确定了的,然而某些情况下我们是不能确定参数的个数的,比如要存储某个人的名字和它的小名,某些人小名可能有2个或者更多个,此时无法确定参数的个数,就可以使用收集参数了,使用收集参数只需在参数前面加上'*'或者'**'。



def storename(name,*nickName):
print 'real name is %s' %name
for nickname in nickName:
print nickname
storename('jack')
storename(u'詹姆斯',u'小皇帝')
storename(u'奥尼尔',u'大鲨鱼',u'三不沾')
DSC0001.jpg
  '*'和'**'表示能够接受0到任意多个参数,'*'表示将没有匹配的值都放在同一个元组中,'**'表示将没有匹配的值都放在一个dictionary中。



def printvalue(a,**d):
print 'a=%d' %a
for x in d:
print x+'=%d' %d[x]
printvalue(1,b=2,c=3)
DSC0002.jpg
  最后需要补充一点:Python中函数是可以返回多个值的,如果返回多个值,会将多个值放在一个元组或者其他类型的集合中来返回。



def function():
x=2
y=[3,4]
return x,y
print function()
DSC0003.jpg
  关于函数的东西暂时就只讲这么多了,具体的用法和细节需要在平时写代码中慢慢理解和积累。

运维网声明 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-58901-1-1.html 上篇帖子: 使用C语言扩展Python(五) 下篇帖子: 使用C语言扩展Python(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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