官术网_书友最值得收藏!

3.6 Python的函數與模塊

3.6.1 Python的函數

函數是用來封裝特定功能的實體,可以對不同類型和結構的數據進行操作,以達到預定目標。比如數據類型轉換函數str、float等就屬于內置函數。當然,除了Python的內置函數與第三方庫函數外,我們還可以自定義函數,從而完成指定任務。

1. 函數示例

例如,求一個列表對象均值的函數avg:

>def avg(x):
>    mean_x = sum(x)/len(x)
>    return(mean_x)

sum函數與len函數是Python內置函數,分別表示求和與長度。

運行完畢后,調用avg函數進行運算:

>avg([23,34,12,34,56,23])
30
2. 函數參數

函數參數可以分為形式參數與實際參數。形式參數作用于函數的內部,不是一個實際存在的變量,當接收到一個具體值時(實際參數),將具體值傳遞到函數內部進行運算。例如對于上例中的函數avg,其形式參數為x(加粗部分)。

>def avg(<b>x</b>):
>    mean_x = sum(<b>x</b>)/len(<b>x</b>)
>    return(mean_x)

實際參數即具體值,通過形式參數傳遞到函數內部參與運算。上述例子中,實際參數為一個列表(加粗部分)。

>avg([<b>23,34,12,34,56,23</b>])

函數參數的傳遞有兩種方式:按位置和按關鍵字。當函數的形式參數過多時,一般采用按關鍵字傳遞的方式,通過形式參數名=實際參數的方式傳遞參數,如下所示。函數age中的4個參數,我們可以通過指定名稱的方式使用它們,也可按位置順序進行匹配:

>def age(a,b,c,d):
>    print (a)
>    print (b)
>    print (c)
>    print (d)
>
>age(a = 'young',b = 'teenager',c = 'median',d = 'old') #按關鍵字指定名稱
young
teenager
median
old
>age('young','teenager','median','old') #按位置順序匹配
young
teenager
median
old

在函數參數中,我們也可以指定形式參數的默認值。此時,該參數稱為可選參數,表示使用時可以不定義實際參數。例如,函數f中有兩個參數,其中參數L指定了默認值None:

>def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

使用該函數時,只需指定參數a的值。該函數返回一個列表對象,若不給定初始列表L,則創建一個列表,再將a加入列表:

>f(3)
[3]
3. 匿名函數lambda

Python提供了匿名函數lambda,其簡化了自定義函數定義的書寫形式,使得代碼更為簡潔。例如通過lambda函數定義函數g:

>g = lambda x:x+1
>g(1)
 2

該函數相當于如下自定義函數:

>def g(x):
>   return(x+1)
>g(1)
2

3.6.2 Python的模塊

為了編寫可維護的代碼,我們可以把很多函數分組放到不同的文件里。這樣,每個文件包含的代碼相對較少。很多編程語言采用這種組織代碼的方式。在Python中,一個py文件稱為一個模塊。其內容形式是文本,可以在IDE或者常用的文本編輯器中編輯。

下面介紹一下自定義模塊。

使用文本編輯器創建一個mod.py文件,其中包含一個函數,如下所示:

# module
def mean(x):
    return(sum(x)/len(x))

使用自定義模塊時,將mod.py文件放置在工作目錄下,通過“import文件名”命令載入,如下所示:

>import mod

在使用該模塊中的函數時,需要加入模塊名信息,如下所示:

>mod.mean([1,2,3])
2

載入模塊還有很多方式,如下所示(注意別名的使用):

>import mod as m # as后表示別名
>m.mean([1,2,3])
2

>from mod import mean
>mean([1,2,3])
2

>from mod import *
>mean([1,2,3])
2

import命令還可以用于載入已經下載好的第三方庫,使用方式與上面所展示的一致。例如,載入numpy模塊:

>import numpy as np

此時,我們就可以使用numpy模塊中的函數,例如基本統計函數:

>x = [1,2,3,4,5]
>np.mean(x) #均值
3.0
>np.max(x)  #最大值
5
>np.min(x)  #最小值
1
>np.std(x)  #標準差
1.41421356237
>np.median(x) #中位數
3.0
主站蜘蛛池模板: 郧西县| 宁阳县| 贺州市| 凯里市| 通州区| 永丰县| 渝中区| 林西县| 太和县| 孝感市| 淮滨县| 博白县| 南充市| 丰顺县| 梁平县| 罗甸县| 祥云县| 岑溪市| 绿春县| 五台县| 科尔| 景东| 霍城县| 峨眉山市| 扶风县| 金堂县| 炎陵县| 石台县| 阿拉善盟| 革吉县| 新野县| 丰镇市| 临沧市| 当涂县| 芦溪县| 玉龙| 吉安县| 沙坪坝区| 柘荣县| 巧家县| 策勒县|