1. 程式人生 > >python基礎之四種函式型別、函式的巢狀呼叫、函式的區域性變數和全域性變數

python基礎之四種函式型別、函式的巢狀呼叫、函式的區域性變數和全域性變數

函式根據有沒有引數,有沒有返回值,可以相互組合,一共有4種
* 無引數,無返回值
* 無引數,有返回值
* 有引數,無返回值
* 有引數,有返回值

<1>無引數,無返回值的函式此類函式,不能接收引數,也沒有返回值,一般情況下,列印提示燈類似的功能,使用這類的函式 def printMenu(): print(’--------------------------’) print(’ xx涮涮鍋 點菜系統’) print(’’) print(’ 1. 羊肉涮涮鍋’) print(’ 2. 牛肉涮涮鍋’) print(’ 3. 豬肉涮涮鍋’) print(’--------------------------’)<2>無引數,有返回值的函式此類函式,不能接收引數,但是可以返回某個資料,一般情況下,像採集資料,用此類函式 # 獲取溫度 def getTemperature(): #這裡是獲取溫度的一些處理過程 #為了簡單起見,先模擬返回一個數據 return 24 temperature = getTemperature() print(‘當前的溫度為:%d’%temperature)結果: 當前的溫度為: 24<3>有引數,無返回值的函式此類函式,能接收引數,但不可以返回資料,一般情況下,對某些變數設定資料而不需結果時,用此類函式<4>有引數,有返回值的函式此類函式,不僅能接收引數,還可以返回某個資料,一般情況下,像資料處理並需要結果的應用,用此類函式 # 計算1~num的累積和 def calculateNum(num): result = 0 i = 1 while i<=num: result = result + i i+=1 return result result = calculateNum(100) print(‘1~100的累積和為:%d’%result)結果: 1~100的累積和為: 5050<5>小總結
* 函式根據有沒有引數,有沒有返回值可以相互組合
* 定義函式時,是根據實際的功能需求來設計的,所以不同開發人員編寫的函式型別各不相同

函式的巢狀呼叫
一個函式裡面又呼叫了另外一個函式,這就是所謂的函式巢狀呼叫
如果函式A中,呼叫了另外一個函式B,那麼先把函式B中的任務都執行完畢之後才會回到上次 函式A執行的位置

變數起作用的程式碼範圍稱為變數的作用域,不同作用域內同名變數之間互不影響就像不同資料夾的同名檔案間互不影響一樣。一個變數在函式外部定義和在內部定義,其作用域是不同的,函式內部定義的變數一般稱為區域性變數在函式外部定義的變數一般稱為去全域性變數區域性變數
* 區域性變數,就是函式內部定義的變數
* 不同的函式,可以定義相同的名字的區域性變數,但是各用個的互不影響
* 區域性變數的作用,為了臨時儲存資料需要在函式中定義變數來進行儲存,這就是他的作用

在函式內部定義的普通變數值在該函式內起作用,當函式執行結束後,在其內部定義的區域性變數將被自動刪除而不可訪問。在函式內部定義的全域性變數當函式結束後仍然存在並且可以訪問全域性變數
* 如果一個變數,既能在一個函式中使用,也能在其他函式中使用,這樣的變數就是全域性變數

定義全域性變數a = 100def test1():print(a)def test2():print(a)# 呼叫函式test1()test2()注意修改全域性變數既然全域性變數,就是能夠在所有的函式中進行使用,那麼可否進行修改呢?1、在函式外邊定義的變數叫做全域性變數2、全域性變數能夠在所有的函式中進行訪問3、如果在函式中修改全域性變數,那麼就需要使用global進行宣告,否則出錯4、如果全域性變數的名字和區域性變數的名字相同,那麼使用的是區域性變數的,強龍不壓地頭蛇>>> a = 1>>> def f():… a += 1… print (a)…>>> f()Traceback (most recent call last):File “”, line 1, in File “”, line 2, in fUnboundLocalError: local variable ‘a’ referenced before assignment>>>>>>>>> li = [1,]>>> def f2():… li.append(1)… print li…>>> f2()[1, 1]>>> li[1, 1]1、在函式中不使用global宣告全域性變數時不能修改全域性變數的本質是不能修改全域性變數的指向,即不能將全域性變數指向新的資料。2、對於不可變型別的全域性變數來說,因其指向的資料不能修改,所以不使用global時無法修改全域性變數。3、對於可變型別的全域性變數來說,因其指向的資料可以修改,所以不使用global時也可修改全域性變數。