内容简介:python基础8-函数
函数的概念我估计每个人都不陌生,我们在学习 C语言 的时候就知道怎么定义一个函数了,那为什么要定义函数呢? 一般情况是第一你为了让主逻辑更清晰,第二是为了代码重用, 经常写 shell 脚本的人应该都有自己的函数库,在 Python 下也类似,很多功能可以复用,了解完这些我们来看看Python下的函数定义和调用。
1、函数定义和调用
在python下定义一个函数要以def开头,然后跟上函数名称和一个括号,最后加上冒号,然后回车空格来写代码块,我们来看一个最简单的函数:
>>> def show(): ... print 'ok' ... >>> show() ok >>>
这里定义了一个叫show的函数名称,函数体就包含了一个执行命令,调用方式是在函数名称后加小括号,在函数名称后的括号可以加入参数传给到函数体内,例如:
>>> def add(x,y): ... print x + y ... >>> add(1,2) 3
这里我们定义了另一个add函数,传入2参数,然后打印两个数的和。
在函数体内除了用print打印我们需要看的内容,还有非常重要的return语句,这个是返回函数处理完的结果,例如我之前写的生成安全组Json格式的函数,完整代码请看这里:
def make_json(vmid,sgid): pdata = {} pdata["instanceId"] = vmid pdata["sgIds"] = sgid pjson = json.dumps(pdata) return pjson
这个函数功能就是将一个字典转成json格式的然后返回。
函数的参数除了上面我们说的基本参数外还有不定长参数,就是你的参数数量不确定,这是我们要在传入的参数前加一个“*”来表示,我们来个例子:
>>> def printnumber( arg1, *vartuple ): ... print "Output is: " ... print arg1 ... for var in vartuple: ... print var ... >>> printnumber( 10 ) Output is: 10 >>> printnumber( 70, 60, 50 ) Output is: 70 60 50
这里传入的*vartuple就是一个不定长的变量,可以没有,也可以是多个,如果多个在函数体内就做一个元组来处理,你要问你怎么知道是作为一个元组来处理呢,我们来测试下看看:
>>> def printnumber( arg1, *vartuple ): ... print "Output is: " ... print arg1 ... for var in vartuple: ... print var ... print type(vartuple) ... >>> printnumber( 70, 60, 50 ) Output is: 70 60 50 <type 'tuple'>
代码没变,我只加了一句,最后输入的就是一个元组类型,也就说明不管你后传入多少参数,统一作为一个元组来处理,相当于传入一个元组。
除了元组可变长参数,还有一种是关键字参数(字典),j这种方式可以将一个Key=value作为参数传入函数中,参数的表示方式是在变量前加两个“**”,关键字参数应该是函数的最后一个参数,例子如下:
>>> def printme(arg1,**kw): ... print arg1 ... for i in kw.keys(): ... print i + '=' + kw[i] ... >>> printme(1,name='xiaoming') 1 name=xiaoming >>> printme(1,name='xiaoming',add='Bj') 1 add=Bj name=xiaoming
最后说一下,我们说的这些参数并不是单一使用的,它们完全可以放到一个函数中,例如:
def printme(arg1,*args,**kargs): print arg1 ....
函数要根据传入的参数进行对应的处理。
前面讲的都是我们需要定义名字的函数,在python里还有一种函数叫匿名函数lambda,它的格式非常简答,但它不太容易理解,它的用法格式如下:
lambda 参数:表达式
例如:
>>> f = lambda x, y : x + y >>> f(1,1) 2
另一个有趣的例子:
>>> a = lambda x, y=2: x * y >>> a(2) 4 >>> a(2,3) 6
当然除了这些python内置了很多有用的函数想map(),reduce(),filter()等,这个后续我们可以单独说这几个函数。
最后我们要说一下函数的变量作用域,变量分局部变量和全局变量,当python解释语句时,先从局部变量开始搜索,如果局部变量没有,就会在全局变量里找,在函数体内定义的是局部变量,函数外的变量是全局变量,那这里就有一个问题,如果全局变量跟函数体内定义的变量名称相同,那在执行时全局变量就会被覆盖,因为在局部变量找到了就不会再全局变量里找了,所以函数要引用一个全局变量就必须用global语句,例如:
>>> a = 2 >>> def p(): ... global a ... print a ... >>> p() 2
global语句的作用是让函数体直接使用全局变量,而无需在函数体内再定义个新局部变量了。
再说最后一个问题,那就是有时候我们经常会在python里看到以两个下划线(__)开头的和结束的名词,大家也不用觉得很奇怪,这些都是python自己保留的用法,所以我们在自定义的变量中是不能用的,例如function.__name__就是函数的名词,function.__doc__就是函数的文档字符串可以简单理解为注释内容。
函数部分就到这里,关于函数的内容真的非常多,我这里说的也基本是很入门的内容,一些高级的内容像闭包,装饰器等实在无法展开写,因为每个都够写几篇的,所以这些后续我们单独去详细讨论,当然如果是初学者,这两个东西搞不懂也不影响你学习,等你用到了在学都来得及,前期主要是把这些基本的打扎实,在此基础上去理解一些概念就会非常简单,最后感谢大家阅读本文章,喜欢的朋友请帮忙转发下吧~
以上所述就是小编给大家介绍的《python基础8-函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rationality for Mortals
Gerd Gigerenzer / Oxford University Press, USA / 2008-05-02 / USD 65.00
Gerd Gigerenzer's influential work examines the rationality of individuals not from the perspective of logic or probability, but from the point of view of adaptation to the real world of human behavio......一起来看看 《Rationality for Mortals》 这本书的介绍吧!