函數的作用
編程大師Martin Fowler先生曾經說過:“代碼有很多種味道,重複是最壞的一種!”,所以,在Python中爲了避免重複出現代碼,我們可以講一個函數功能封裝到一個函數的功能模塊中,有需要使用這個函數的地方我們只需要調用這個函數即可。
函數的定義
在Python中用def定義函數,在函數執行完後可以通過return關鍵字來返回一個值,所返回出來的值在後續的程序中可以被使用。
def 函數名():
函數體
renturn 要返回的值
函數名() #調用函數
函數的參數
1、函數的參數可以有默認值,在調用函數時如果沒有傳入對應參數的值時系統將使用該參數的默認值。
def add(a=0,b=2,c=3):
2、函數還可以使用可變參數。
def add(*args): #在參數名前的*表示args是一個可變參數,即在調用add函數時可以傳入0個或多個參數
3、函數還可以不傳入參數,即在函數名後的括號裏不寫任何東西。
def add():
函數的四種形式
沒有參數沒有返回值
def function1():
print('這是一個沒有參數沒有返回值的函數')
沒有參數有返回值
import random
def function2():
return random.ranint(1,100)
有參數有返回值
def function3(a = 3,b = 4):
c = a + b
print('這倆個數和爲%d'%c)
有參數沒有返回值
def function4(a = 3,b = 4):
c = a + b
print('這倆個數和爲%d'%c)
return c
函數的調用,必須等函數全部執行完後才能執行下一步
用模塊管理函數
在Python中每個文件就代表了一個模塊,在不同的模塊中可以有同名的函數,在使用函數的時候我們通過import關鍵字導入指定的模塊就可以區分到底要使用的是哪個模塊中的函數,如下所示。
直接導入函數:
import module1 as foo #module1爲函數所在的文件名
導入模塊:
import nodele1
需要說明,如果我們導入的模塊除了定義函數之外還有其他的可以執行的代碼時,Python解釋器在導入這個模塊時就會執行代碼,但是事實上我們並不想這樣,因此如果我們在模塊中編寫了其他的執行代碼,最好時將這些執行代碼放入如下所示的條件中,這樣只有在我們直接運行該模塊時 if 條件下的這些代碼纔會被執行,因爲只有在直接執行該模塊時名字纔是"main"。
__name__是Python中一個隱含的變量,它代表了模塊的名字,只有被Python解釋器直接執行的模塊的名字纔是_main_。
if __name__ == '__main__':
print('hello world')
關於全局變量和局部變量
一般我們在函數中定義一個局部變量時,只能作用於函數的局部作用域,並不能作用於全局作用域。
我們可以使用global關鍵字來指示函數裏的局部變量來源於全局作用域,如果全局作用域中沒有這個變量,那麼下面一行代碼就會定義這個變量並將其作用域全局作用域。這樣函數裏的變量就可以同時作用與全局作用域了。如下所示,如果函數裏的變量a發生變化時,函數外的值也會隨之變化。
a = 200
def foo():
global a
同理,如果我們希望函數內部的函數能夠修改嵌套作用域中的變量,可以使用nonlocal關鍵字來指示變量作用域嵌套作用域。