返回值
通过例子函数来说明,如下(输出斐波那契数列):
#!/usr/bin/env python
# coding=utf-8
def fibs(n):
result = [0,1]
for i in range(n-2):
result.append(result[-2] + result[-1])
return result
if __name__ == "__main__":
lst = fibs(10)
print lst
观察fibs函数,最后有一个语句return result,意思是将变量result的值返回。返回给谁呢?这要看我们当前在什么位置调用该函数了。在上面的程序中,以lst = fibs(10)语句的方式,调用了函数,那么函数就将值返回到当前状态,并记录在内存中,然后把它赋值给变量lst。如果没有这个赋值语句,函数照样返回值,但是它飘忽在内存中,我们无法得到,并且最终还被当做垃圾被python回收了。
注意:上面的函数只返回了一个返回值(是一个列表),有时候需要返回多个,是以元组形式返回。
>>> def my_fun():
... return 1,2,3
...
>>> a = my_fun()
>>> a
(1, 2, 3)
如果没有使用return。事实上返回的是一个None,这种模样的函数,通常采用下面的方式,因为他们返回的是None,似乎这个返回值利用价值不高,于是就不用找一个变量来接受返回值了。
>>> def my_fun():
... print "I am doing somthin."
...
>>> my_fun()
I am doing somthin.
return还有一个作用,结束正在执行的函数,有点类似循环中的break的作用。如下:
>>> def my_fun():
... print "I am coding."
... return
... print "I finished."
...
>>> my_fun()
I am coding.
函数中的文档
一般在每个函数名字的下面,还要比较多的说明,这个被称为“文档”,在文档中主要是说明这个函数的用途。
>>> def my_fun():
... """
... This is my function.
... """
... print "I am a craft."
...
>>> my_fun.__doc__
'\n This is my function.\n '
在这个函数的名称下面,用三个引号的方式,包裹着对这个函数的说明,那个就是函数文档,doc它的内容就来自这里。
全局变量和局部变量
x = 2
def funcx():
x = 9
print "this x is in the funcx:-->",x
funcx()
print "--------------------------"
print "this x is out of funcx:-->",x
那么,这段代码输出的结果是什么呢?看:
this x is in the funcx:--> 9
--------------------------
this x is out of funcx:--> 2
从输出看出,运行funcx(),输出了funcx()里面的变量x=9;然后执行代码中的最后一行,print "this x is out of funcx:-->",x
特别要关注的是,前一个x输出的是函数内部的变量x;后一个x输出的是函数外面的变量x。两个变量彼此没有互相影响,虽然都是x。从这里看出,两个x各自在各自的领域内起到作用。
把那个只在函数体内(某个范围内)起作用的变量称之局部变量。
全局变量的例子如下:
x = 2
def funcx():
global x #跟上面函数的不同之处
x = 9
print "this x is in the funcx:-->",x
funcx()
print "--------------------------"
print "this x is out of funcx:-->",x
以上两段代码的不同之处在于,后者在函数内多了一个global x,这句话的意思是在声明x是全局变量,也就是说这个x跟函数外面的那个x同一个,接下来通过x=9将x的引用对象变成了9。所以,就出现了下面的结果。
this x is in the funcx:--> 9
--------------------------
this x is out of funcx:--> 9