函數定義
函數是可重用的代碼,可以在程序中任何地方調用。我們使用這個語法來定義函數:
def function(parameters): instructions return value
def 關鍵字告訴 Python,我們有一段可重用的代碼(函數)。一個程序可以有很多函數。
示例
我們可以調用函數(參數)的功能。
#!/usr/bin/python def f(x): return x*x print f(3)
輸出結果:
9
該函數具有一個參數,x。返回值是函數的返回值。並非所有的函數都有返回值。我們可以通過傳遞多個變量:
#!/usr/bin/python def f(x,y): print 'You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y) print 'x * y = ' + str(x*y) f(3,2)
輸出:
You called f(x,y) with the value x = 3 and y = 2 x * y = 6
作用域
變量隻能實現它們所限定的區域,這就是所謂的作用範圍。下麵示例中將無法正常工作:
#!/usr/bin/python def f(x,y): print 'You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y) print 'x * y = ' + str(x*y) z = 4 # cannot reach z, so THIS WON'T WORK z = 3 f(3,2)
但是,這將:
#!/usr/bin/python def f(x,y): z = 3 print 'You called f(x,y) with the value x = ' + str(x) + ' and y = ' + str(y) print 'x * y = ' + str(x*y) print z # can reach because variable z is defined in the function f(3,2)
讓我們來進一步看看:
#!/usr/bin/python def f(x,y,z): return x+y+z # this will return the sum because all variables are passed as parameters sum = f(3,2,1) print sum
在函數中調用函數
我們還可以從另外一個函數獲取變量的內容:
#!/usr/bin/python def highFive(): return 5 def f(x,y): z = highFive() # we get the variable contents from highFive() return x+y+z # returns x+y+z. z is reachable becaue it is defined above result = f(3,2) print result
變量不能的範圍(作用域)之外。下麵的例子是行不通的。
#!/usr/bin/python def doA(): a = 5 def doB(): print a # does not know variable a, WILL NOT WORK! doB()
但這個例子使用外部參數可以運行:
#!/usr/bin/python def doA(): a = 5 def doB(a): print a # we pass variable as parameter, this will work doB(3)
在最後的例子中,我們有一個名為 a 的兩個不同的變量,因為變量 a 的範圍是僅在函數。 該變量冇有範圍之外不會被知道。
該函數 doB() 將打印 3(傳遞給它的值)。分配 a = 5 包含在函數 doA() 內但不被使用,除函數 doA() 本身之內,並不可見在函數 doB() 或代碼的其餘部分。
如果一個變量可以到達代碼的任何位置被稱為:全局變量。如果一個變量隻作用在一定範圍內,我們稱之為:局部變量。