返回值
通過例子函數來說明,如下(輸出斐波那契數列):
#!/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