1. 程式人生 > 其它 >Python趣味入門9:函式是你走過的套路,詳解函式、呼叫、引數及返回值

Python趣味入門9:函式是你走過的套路,詳解函式、呼叫、引數及返回值

概念

瓊恩·雪諾當上守夜人的司令後,為訓練士兵對付殭屍兵團,把成功斬殺殭屍的一系列動作編排成了“葵花寶典劍法”,這就是函式。相似,在計算機世界,一系列前後連續的計算機語句組合在一起稱之為函式,本章主要介紹如何在程式中定義和使用函式。

1、函式的定義

有了函式後,當要用到相同功能時,我們就可以重複地呼叫它而不用重寫程式碼。下面是瓊恩·雪諾用來上報戰況的程式,每殺死1鬼,通訊員可以敲kill_dead(),而不用反覆敲print()語句了。

如下定義了 kill_dead函式,用來上報戰況

def kill_dead():
    print('殺死異鬼1頭')

上面def語句定義了函式kill_dead,函式名可以由寫程式的人命名,必須以字母開頭,緊跟圓括號,函式內的語句都必須多縮排4個空格。

2、函式的引數

例如print()是系統內建的函式,要顯示文字時我們把文字放進括號裡,這就是函式的引數。定義函式時我們也可以接受引數。
在呼叫時分為位置引數與關鍵字引數。

2.1 引數呼叫方式

我們來完善這個“戰況通報程式”,把英雄的名字和戰鬥業績也加上。

如下定義了 kill_dead函式,用來上報戰況

  • name: 表示人名變數,
  • number:表示戰績變數
def kill_dead(name,number):
    print(name,'殺死異鬼',number,'頭') #逗號分隔引數顯示

這是主程式(沒有縮排)

kill_dead('Snow',2) #位置引數呼叫
kill_dead(name='Sam',number = 1) #關鍵字引數呼叫
kill_dead('Guido',number = 1) #位置+關鍵字引數呼叫

執行上面的程式會顯示出如下的結果:

Snow 殺死異鬼 2 頭
Sam 殺死異鬼 1 頭
Guido 殺死異鬼 1 頭

第1行語句是位置呼叫,第2行語句是關鍵字呼叫方式,第3行是混合方式。

2.2 引數的預設值

上述播報戰況的程式中,我們認為number(數量)每回填上比較麻煩,因為90%的的情況都是1,除了Snow偶爾會殺死2個。這我們就可以使用預設值,而不是每次都填。預設值可以使用等號寫在引數變數後面,如下:

如下定義了 kill_dead函式,用來上報戰況

  • name: 表示人名變數,
  • number:表示戰績變數
def kill_dead(name,number=1):
    print(name,'殺死異鬼',number,'頭') #顯示
  • 預設值數量為1,可以不填數量
    kill_dead('小牛叔')

小牛叔殺死了1位,執行結果呢?

小牛叔 殺死異鬼 1 頭

說明: 有預設值的引數變數,叫可選引數;沒有預設值的引數,叫必選引數,可選引數定義時必須放在右側。

2.3 引數的*運算和**運算

特殊情況出現了,假設兵甲、兵乙...兵N同時殺死了1個敵人,這時的引數數量不固定怎麼辦?可以使用*運算,把所有的位置引數“壓縮”成一個元組變數;此外,還可以使用**運算,把所有的關鍵字引數“壓縮”成一個字典。用法如下:

  • *names: 基於位置引數元組,表示的人名變數,
  • **killed:基於關鍵字引數的字典,表示目標和數量
def group_kill(*names,**killed):
    print(names,'殺死',killed['target'],killed['number'],'頭') #顯示

張王被壓縮成元組存在names,後面被組裝進字典killed裡。

group_kill('張','王',number=2,target='異龍')

執行結果:

('張', '王') 殺死 異龍 2 頭

3、函式的返回值

類似於input()輸入函式可以返回使用者輸入的字串結果,我們定義的函式也有返回值,返回值使用return語句。

假設有賞金獵人會根據殺敵多少從守夜人那裡領取每個人頭50金幣每個龍500金幣,計算2人3龍的賞金的程式這麼寫:

def money(dead:int,drag:int)->int:
    return (dead*50 + drag*500)

執行如下:

print('2人3龍的賞金為:',money(2,3))

在本程式裡,我們在引數後使用了:int,函式後使用了->int,其實這表示引數是整數,返回值是整數,加了會使程式更加好理解,不強制要求新增。

執行後的結果如下:

2人3龍的賞金為: 1600

跟隨小牛叔的腳步,程式設計入門不掉隊