《python教程:從入門到實踐》——函數+類

1、函數

① 定義函數

《python教程:從入門到實踐》——函數+類

這是書上的例子

要素:def關鍵字,括號,冒號,文檔字符串。形參(函數定義),實參(函數調用)。

--- 注意,函數使用中,經常出現的不經意錯誤有:忘記冒號,忽視縮進。

② 傳遞實參。

---為什麼傳遞參數:調用函數時, 必須將每個實參都關聯到函數定義中的一個形參。

1)位置實參:基於實參的順序,即函數調用中實參的順序與函數定義中形參的順序保持一致、

2)關鍵字實參:無需考慮順序,直接將名稱和值關聯起來。調用函數時,向Python明確指出了各個實參對應的形參。

《python教程:從入門到實踐》——函數+類

3)函數形參可以設置默認值,但是,使用默認值時,在形參列表中必須先列出沒有默認值的形參,再列出有默認值的形參。當實參個數不足時,系統當其為位置實參處理。

---Python先匹配位置實參和關鍵字實參,再將餘下的實參都收集到最後一個形參中。

---鑑於可混合使用位置實參、關鍵字實參和默認值,通常有多種等效的函數調用方式;這無關緊要,使用對你來說最容易理解的調用方式即可。

③ 函數的返回值,及讓參數變為可選

1)可使用return語句將值返回到函數的調用值;可使用默認值來讓實參變成可選的。

《python教程:從入門到實踐》——函數+類

2)函數可返回任何類型的值,包括列表和字典等較複雜的數據結構。

④ 其他注意:

1)每個函數都應只負責一項具體的工作;編寫一個函數時,如果發現執行的任務太多,請嘗試將這些代碼劃分到兩個函數中。

2)有時候,需要禁止函數修改列表,可向函數傳遞列表的副本而不是原件;這樣,函數所做的任何修改都隻影響副本,而不影響原件。這時,可以用切片表示法[:]創建列表的副本。例如,print_models(unprinted_designs[:], completed_models)

3)任意數量的實參:

下例中,形參名*toppings中的星號創建一個名為toppings的空元組:

結果:

下例中,形參**user_info中的兩個星號讓Python創建一個名為user_info的空字典,並將收到的所有名稱-值對都封裝到這個字典中:

《python教程:從入門到實踐》——函數+類

⑤ 將函數存儲於模塊

函數的優點之一是,可將代碼塊與主程序分離,還可以更進一步,將函數存儲在被稱為模塊的獨立文件中,再將模塊導入到主程序中,模塊是擴展名為.py的文件。import語句允許在當前運行的程序文件中使用模塊中的代碼。

將函數存儲在獨立文件中後,可與其他程序員共享這些文件而不是整個程序。

學會如何導入函數,還能讓你使用其他人編寫的函數庫。

導入函數的幾種方法:

先編寫一個函數文件,放在python所在路徑中。

《python教程:從入門到實踐》——函數+類

1)import語句:要調用某個模塊中的函數,可指定導入模塊的名稱pizza和函數名make_pizza(),並用句點分隔。注意引用的時候要加模塊名稱。

可以給函數指定別名,然後引用也是別名:

《python教程:從入門到實踐》——函數+類

2)from語句:顯式導入

《python教程:從入門到實踐》——函數+類

這裡,還可以給函數指定別名,from pizza import make_pizza as mp,as mp是別名

使用星號(*)運算符可讓Python導入模塊中的所有函數:from pizza import *,注意慎用,因為Python可能遇到多個名稱相同的函數或變量,進而覆蓋函數。

⑥ 格式注意

函數名稱,只用小寫字母和下劃線;

每個函數都一定用文檔字符串,註釋其功能;

給形參指定默認值時,等號兩邊不要有空格,函數調用時實參也是;

函數定義中如果要換行,可以輸入左括號後按回車鍵,並在下一行按兩次Tab鍵,從而將形參列表和只縮進一層的函數體區分開來;

如果程序或模塊包含多個函數,可使用兩個空行將相鄰的函數分開。

2、類和實例

① 類的定義

在Python中約定,首字母大寫的名稱指的是類。

類中的方法,其實就是類中的函數,可以分為:實例方法,類方法,靜態方法。

實例方法,第一個參數必須要默認傳實例對象,一般習慣用self。

靜態方法,參數沒有要求。

類方法,第一個參數必須要默認傳類,一般習慣用cls。

在這裡,命名約定很有用:我們通常可以認為首字母大寫的名稱(如Dog)指類,而小寫的名稱(如my_dog)指根據類創建的實例。

__init__()方法(前後有兩個下劃線)意義重大,原因有兩個:第一,在對象生命週期中初始化是最重要的一步;每個對象必須正確初始化後才能正常工作。第二,__init__()參數值可以有多種形式。

包含知識點:

類的定義,__init__()方法,其他方法,

類的實例化,實例調用方法

舉例:

《python教程:從入門到實踐》——函數+類

② 其他

1)給屬性指定默認值

類中的每個屬性都必須有初始值,哪怕這個值是0或空字符串。設置默認值時,可以在方法__init__()內指定這種初始值,這時,就無需包含為它提供初始值的形參。例如:

《python教程:從入門到實踐》——函數+類

2)修改屬性的值

可以以三種方法修改屬性的值:通過實例進行修改;通過方法進行設置;通過方法進行遞增(增加特定的值)。

《python教程:從入門到實踐》——函數+類

《python教程:從入門到實踐》——函數+類

《python教程:從入門到實踐》——函數+類

3)類的繼承

創建子類時,父類必須包含在當前文件中,且位於子類前面;定義子類時,必須在括號內指定父類的名稱。父類也稱為超類(superclass),特殊函數super()故而得名,幫助Python調用父類的方法__init__(),讓子類的實例包含父類的所有屬性。

《python教程:從入門到實踐》——函數+類

注意:

如果一個屬性或方法是任何對象都有的,而不是子類特有的,就應將其加入到父類(前面模塊代碼)中而不是子類中。這樣,使用子類的對象都將獲得相應的功能,而子類只包含子類對象特有屬性和行為的代碼。

若子類中有與父類同名的方法,系統按照子類的來執行,忽略父類中的定義,這又叫父類方法的重寫。

將長長的大型類拆分成多個協同工作的小類,例如下例:---這看似做了很多額外的工作,但現在我們想多詳細地描述電瓶都可以,且不會導致ElectricCar類混亂不堪。

4)模塊導入

為讓文件儘可能整潔, Python允許你將類存儲在模塊(.py的文件)中,然後在主程序中導入模塊;

每個模塊文件中,都應該首行添加模塊級文檔字符串;

雖然同一個模塊中的類之間應存在某種相關性,但理論上可根據需要在一個模塊中存儲任意數量的類;

可以一個模塊中導入一個類:from car import Car,

也可以導入多個類,用逗號分隔:from car import Car, ElectricCar

還可以導入整個模塊,再使用句點表示法訪問需要的類:需要從一個模塊中導入很多類時,推薦這種方法。

import car

my_tesla = car.ElectricCar('tesla', 'roadster', 2016)

還可以導入所有類:from car import * ,不推薦。

一開始應讓代碼結構儘可能簡單。先儘可能在一個文件中完成所有的工作,確定一切都能正確運行後,再將類移到獨立的模塊中。

最後,Python安裝後,自帶一個標準庫,標準庫是一組模塊,包含一些現有的函數和類,可以自行導入使用。隨著你對標準庫的瞭解越來越深入,將熟悉大量可幫助處理常見情形的模塊。

5)格式約定

類的命名:應採用駝峰命名法,即類名中的每個單詞的首字母都大寫,不使用下劃線;

實例、模塊命名:都採用小寫格式,並在單詞之間加上下劃線;

類和類之間用兩個空行來分隔;在類內部,方法和方法之間,可用一個空行來分隔;

需要同時導入標準庫中的模塊和自己編寫的模塊時:先編寫導入標準庫模塊的import語句,再添加一個空行,然後編寫導入你自己編寫的模塊的import語句。這種做法更容易讓讀者明白各個模塊的來源。

《python教程:從入門到實踐》——函數+類


分享到:


相關文章: