Python知識梳理

雪飛鴻發表於2018-09-03

這是個人學習筆記,非教程,內容會有些混亂

極簡教程

圖片來源已不明

資料型別

我們可以使用type()函式類獲取物件的型別,Python3中內建資料型別包括:None,int,float,complex,str,list,dict,tuple,set,frozenset,range等,Python2中還有long型別,Python中並沒有內建陣列型別。

dict,list,set這些是可變型別(使用者自定義型別也可變),可以改變型別物件的值;數值和字串型別則是不可變的。

  • str
    與js一樣,python中字串即可用單引號也可用雙引號表示
  • numbers
    Python3中數值型別有:intfloat兩種
  • list
    字面量表示:[1,1.0,False,`list`]

列表推導式,建立列表的一種簡易方法:

  • tuple
    字面量表示:(1,1.0,False,`tuple`)
  • range

list、tuple、range均屬於序列型別(Sequence Types)

  • dict
  • set/frozenset
    集合是不包含重複元素的資料集,frozenset是不可變的,set是可變的,可以使用字面量構建一個集合{1,2,2,4,5}會輸出{1,2,4,5}

型別轉換

Python中型別轉換只需呼叫相關函式即可


函式

# 函式定義模板
def func_name([self,][args]):
    pass

def say_hello():
    print(`hello python!`)

# python3.5之後,定義函式時可以新增型別說明
# 這裡只是提供一個說明文件而非強制型別約束
def type_instruction(num:int)->int:
    return num

定義多返回值函式

# 多返回值函式,返回一個tuple物件
def multi_returns():
    return 0,1

內建函式

Python中有許多內建函式

  • dir
    我們可以使用dir()函式來檢視物件都含有哪些成員:

lambda

Python中使用lambda關鍵字即可建立lambda表示式:

*args 與 **kvargs

*args**kvargs都用於函式中接收多個引數,這裡argskvargs只是約定俗成的寫法,可以換成其它的名稱,但***則是必須的。
*args**kvargs的區別是,*args用於接受普通引數,**kvargs用於接受鍵值對引數。


三元運算子

物件導向

Python中一切皆物件(這句話理解起來並不是那麼容易),包括函式(C#,JAVA中函式不能獨立存在)。這裡貼一篇以前寫的文章:Python中的類、物件、繼承

Python按引用傳遞物件,對於不可變物件在修改時會產生新的物件;而對於可變物件,所有的修改都會反映在原有物件上。

魔術方法是Python物件模型的重要部分。

可以動態的給物件/型別新增屬性,若給型別新增屬性,則該屬性在已產生的例項上也是可見的:

異常與錯誤

Python中異常與錯誤類間關係如下:

自定義異常只需繼承Exception或各種Error類即可

異常處理

try:
    raise IOError(`使用raise語句丟擲異常`)
except IOError as err:
    print(err)
else:
    print(`未發生異常則執行`)
finally:
    pass

捕獲多個異常型別:

try:
    raise IOError()
except (IOError,TypeError):
    pass

with語句

with...as...語句等價於try...finally...,與C#中的using語句類似


命名規範

module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.

應該避免的名稱
  1. 單字元名稱, 除了計數器和迭代器.
  2. 包/模組名中的連字元(-)
  3. 雙下劃線開頭並結尾的名稱(Python保留, 例如__init__)
命名約定
  1. 所謂”內部(Internal)”表示僅模組內可用, 或者, 在類內是保護或私有的.
  2. 用單下劃線(_)開頭表示模組變數或函式是protected的(使用import * from時不會包含).
  3. 用雙下劃線(__)開頭的例項變數或方法表示類內私有.
  4. 將相關的類和頂級函式放在同一個模組裡. 不像Java, 沒必要限制一個類一個模組.
  5. 對類名使用大寫字母開頭的單詞(如CapWords, 即Pascal風格), 但是模組名應該用小寫加下劃線的方式(如lower_with_under.py). 儘管已經有很多現存的模組使用類似於CapWords.py這樣的命名, 但現在已經不鼓勵這樣做, 因為如果模組名碰巧和類名一致, 這會讓人困擾.
Python之父Guido推薦的規範
Type Public Internal
Modules lower_with_under _lower_with_under
Packages lower_with_under
Classes CapWords _CapWords
Exceptions CapWords
Functions lower_with_under() _lower_with_under()
Global/Class Constants CAPS_WITH_UNDER _CAPS_WITH_UNDER
Global/Class Variables lower_with_under _lower_with_under
Instance Variables lower_with_under _lower_with_under (protected) or __lower_with_under (private)
Method Names lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private)
Function/Method Parameters lower_with_under
Local Variables lower_with_under

包與模組

  • 模組
    包含Python語句或定義的檔案就是一個模組,檔名就是模組名。在一個模組中,模組名是全域性變數__name__的值。

  • 包含__init__.py檔案的資料夾即可視為一個包,包用於管理模組,可以防止模組命名衝突。如:A.CB.C,分別表示A包中的C模組和B包中的C模組。
  • 匯入模組
    import aimport a as aliasfrom a import *from a import b,c

Python直譯器會先從內建模組中尋找匯入的模組,然後從sys.path中指定的模組搜尋路徑尋找模組

測試

編寫一個檔案操作類,檔名為file_operator.py

# coding=utf-8

import codecs

class FileOperator:
    def save_file(self, file_path, content, encoding="utf-8"):
        with codecs.open(file_path, "w", encoding) as f:
            f.write(content)

編寫測試用例,檔名為test_file_operator.py

# coding=utf-8

import unittest

class TestFileOperator(unittest.TestCase):
    def test_save_file(self):
        content = "file content 
 文字內容"
        opt = file.FileOperator()
        opt.save_file("1.txt", content)


if __name__ == "__main__":
    unittest.main()

工具推薦

小結

以上是自己近期學習Python的一些總結,全文的主要關注點在Python語言本身。掌握以上內容後,便可以用Python寫些指令碼,輔以其他第三方包或框架就可以幹更多更復雜的事了。如,爬蟲、資料分析、後端開發以及現在比較熱的人工智慧(其實,我是不建議追熱點的)。

用了一段時間的Python後,會覺著Python挺有意思的。

最後附上一張,個人總結的語言學習套路:

推薦閱讀

人生苦短,為什麼我要用Python?
Python風格規範
Python語言規範
[[Python]記憶體管理](https://chenrudan.github.io/blog/2016/04/23/pythonmemorycontrol.html)
Python進階
Python 入門指南
Python 3.7.0 documentation


相關文章