函數(shù)
定義:函數(shù)是組織好的,可以重復(fù)使用的,可以實(shí)現(xiàn)單一功能的代碼。
比如,前面學(xué)過(guò)的print()函數(shù)、int()函數(shù)等:
括號(hào)里放的東西,也就是我們需要輸入給函數(shù)的數(shù)據(jù),它在函數(shù)中被稱作【參數(shù)】?!緟?shù)】指向的是函數(shù)要接收、處理怎樣的數(shù)據(jù)(你也可以把它理解成自變量)。
自定義和調(diào)用函數(shù)
格式:def (函數(shù)名): ? ? ? ? ? ? ? ? ?? 例如:? def math(x):
? ? ? ? ? ? ? ? ? 函數(shù)體 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? y=3x+5
? ? ? ? ? ? ? ? ? return語(yǔ)句 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return y

調(diào)用函數(shù): 就是輸入函數(shù)名和參數(shù)所對(duì)應(yīng)的值,這個(gè)過(guò)程在函數(shù)里叫作參數(shù)的傳遞(pass)。
函數(shù)的參數(shù)
函數(shù)中常見(jiàn)的參數(shù)有:位置參數(shù)、默認(rèn)參數(shù)和不定長(zhǎng)參數(shù)。
沒(méi)有return語(yǔ)句的函數(shù),Python也會(huì)在末尾隱性地加上return None,即返回None值。
1、位置參數(shù):舉例解釋

這里的'話梅花生'和'牛肉拉面'是對(duì)應(yīng)參數(shù)的位置順序傳遞的,所以appetizer和course被叫作【位置參數(shù)】,當(dāng)有多個(gè)參數(shù)的時(shí)候,我們就必須按照順序和數(shù)量傳遞,這也是最常見(jiàn)的參數(shù)類型。
2、默認(rèn)參數(shù):

默認(rèn)參數(shù),是直接在定義函數(shù)的時(shí)候里給參數(shù)賦值。
需要注意的是:默認(rèn)參數(shù)必須放在位置參數(shù)之后。
如果一個(gè)函數(shù)的某個(gè)參數(shù)值總是固定的,那么設(shè)置默認(rèn)參數(shù)就免去了每次都要傳遞的麻煩。
默認(rèn)參數(shù)并不意味著不能改變,默認(rèn)參數(shù)也可以給與新的賦值;
3、不定長(zhǎng)參數(shù):
即傳遞給參數(shù)的數(shù)量是可選的、不確定的。
格式比較特殊,是一個(gè)星號(hào)*加上參數(shù)名,它的返回值也比較特殊,如圖:

這里order 的類型是元組,元組中的元素是不可更改的;
不定長(zhǎng)參數(shù)可以接受任意數(shù)量的值。
返回多個(gè)值:
要返回多個(gè)值,只需將返回的值寫在return語(yǔ)句后面,用英文逗號(hào)隔開(kāi)即可;

這里用到的是random模塊中的.choice()隨機(jī)選擇函數(shù);
多個(gè)函數(shù)間的配合:
一個(gè)程序往往是通過(guò)多個(gè)函數(shù)的配合來(lái)實(shí)現(xiàn)的;
當(dāng)多個(gè)函數(shù)同時(shí)運(yùn)行時(shí),就涉及函數(shù)中一個(gè)非常重要的概念 —— 變量作用域;
舉例:

變量作用域:程序中的變量并不是在哪個(gè)位置都可以被使用的,使用權(quán)限決定于這個(gè)變量是在哪里賦值的。關(guān)于這個(gè)概念,目前我們只需要掌握下面兩點(diǎn)即可:
第一點(diǎn):一個(gè)在函數(shù)內(nèi)部賦值的變量?jī)H能在該函數(shù)內(nèi)部使用(局部作用域),它們被稱作【局部變量】,如cost()函數(shù)里的variable_cost,他只能用于cost()內(nèi)部,不能再第10行,sum_cost()函數(shù)中使用。
第二點(diǎn):在所有函數(shù)之外賦值的變量,可以在程序的任何位置使用(全局作用域),它們被稱作【全局變量】,如第一行的rent。
那要怎么解決“局部變量”和”全局變量“之間的矛盾呢?有幾種方法可供參考,第一種方法最取巧:把局部變量都放在函數(shù)外,變成全局變量;
那有沒(méi)有一個(gè)能在函數(shù)內(nèi)修改的方法呢?這時(shí)候global語(yǔ)句就能派上用場(chǎng)了,它可以將局部變量聲明為全局變量,如下圖:

global語(yǔ)句一般寫在函數(shù)體的第一行,它會(huì)告訴Python,“我希望variable_cost是個(gè)全局變量,所以請(qǐng)不要用這個(gè)名字創(chuàng)建一個(gè)局部變量”。所以上面圖中的sum_cost()函數(shù)內(nèi)部現(xiàn)在可以直接使用聲明后的全局變量variable_cost。