1、函數
① 定義函數
要素:def關鍵字,括號,冒號,文檔字符串。形參(函數定義),實參(函數調用)。
--- 注意,函數使用中,經常出現的不經意錯誤有:忘記冒號,忽視縮進。
② 傳遞實參。
---為什麼傳遞參數:調用函數時, 必須將每個實參都關聯到函數定義中的一個形參。
1)位置實參:基於實參的順序,即函數調用中實參的順序與函數定義中形參的順序保持一致、
2)關鍵字實參:無需考慮順序,直接將名稱和值關聯起來。調用函數時,向Python明確指出了各個實參對應的形參。
3)函數形參可以設置默認值,但是,使用默認值時,在形參列表中必須先列出沒有默認值的形參,再列出有默認值的形參。當實參個數不足時,系統當其為位置實參處理。
---Python先匹配位置實參和關鍵字實參,再將餘下的實參都收集到最後一個形參中。
---鑑於可混合使用位置實參、關鍵字實參和默認值,通常有多種等效的函數調用方式;這無關緊要,使用對你來說最容易理解的調用方式即可。
③ 函數的返回值,及讓參數變為可選
1)可使用return語句將值返回到函數的調用值;可使用默認值來讓實參變成可選的。
2)函數可返回任何類型的值,包括列表和字典等較複雜的數據結構。
④ 其他注意:
1)每個函數都應只負責一項具體的工作;編寫一個函數時,如果發現執行的任務太多,請嘗試將這些代碼劃分到兩個函數中。
2)有時候,需要禁止函數修改列表,可向函數傳遞列表的副本而不是原件;這樣,函數所做的任何修改都隻影響副本,而不影響原件。這時,可以用切片表示法[:]創建列表的副本。例如,print_models(unprinted_designs[:], completed_models)
3)任意數量的實參:
下例中,形參名*toppings中的星號創建一個名為toppings的空元組:
結果:
下例中,形參**user_info中的兩個星號讓Python創建一個名為user_info的空字典,並將收到的所有名稱-值對都封裝到這個字典中:
⑤ 將函數存儲於模塊
函數的優點之一是,可將代碼塊與主程序分離,還可以更進一步,將函數存儲在被稱為模塊的獨立文件中,再將模塊導入到主程序中,模塊是擴展名為.py的文件。import語句允許在當前運行的程序文件中使用模塊中的代碼。
將函數存儲在獨立文件中後,可與其他程序員共享這些文件而不是整個程序。
學會如何導入函數,還能讓你使用其他人編寫的函數庫。
導入函數的幾種方法:
先編寫一個函數文件,放在python所在路徑中。
1)import語句:要調用某個模塊中的函數,可指定導入模塊的名稱pizza和函數名make_pizza(),並用句點分隔。注意引用的時候要加模塊名稱。
可以給函數指定別名,然後引用也是別名:
2)from語句:顯式導入
這裡,還可以給函數指定別名,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__()方法,其他方法,
類的實例化,實例調用方法
舉例:
② 其他
1)給屬性指定默認值
類中的每個屬性都必須有初始值,哪怕這個值是0或空字符串。設置默認值時,可以在方法__init__()內指定這種初始值,這時,就無需包含為它提供初始值的形參。例如:
2)修改屬性的值
可以以三種方法修改屬性的值:通過實例進行修改;通過方法進行設置;通過方法進行遞增(增加特定的值)。
3)類的繼承
創建子類時,父類必須包含在當前文件中,且位於子類前面;定義子類時,必須在括號內指定父類的名稱。父類也稱為超類(superclass),特殊函數super()故而得名,幫助Python調用父類的方法__init__(),讓子類的實例包含父類的所有屬性。
注意:
如果一個屬性或方法是任何對象都有的,而不是子類特有的,就應將其加入到父類(前面模塊代碼)中而不是子類中。這樣,使用子類的對象都將獲得相應的功能,而子類只包含子類對象特有屬性和行為的代碼。
若子類中有與父類同名的方法,系統按照子類的來執行,忽略父類中的定義,這又叫父類方法的重寫。
將長長的大型類拆分成多個協同工作的小類,例如下例:---這看似做了很多額外的工作,但現在我們想多詳細地描述電瓶都可以,且不會導致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語句。這種做法更容易讓讀者明白各個模塊的來源。
閱讀更多 下小雨2018 的文章