Python知識梳理
這是個人學習筆記,非教程,內容會有些混亂
極簡教程
資料型別
我們可以使用type()
函式類獲取物件的型別,Python3中內建資料型別包括:None,int,float,complex,str,list,dict,tuple,set,frozenset,range
等,Python2中還有long
型別,Python中並沒有內建陣列型別。
dict,list,set
這些是可變型別(使用者自定義型別也可變),可以改變型別物件的值;數值和字串型別則是不可變的。
列表推導式,建立列表的一種簡易方法:
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
都用於函式中接收多個引數,這裡args
和kvargs
只是約定俗成的寫法,可以換成其它的名稱,但*
和**
則是必須的。*args
和**kvargs
的區別是,*args
用於接受普通引數,**kvargs
用於接受鍵值對引數。
三元運算子
物件導向
Python中一切皆物件(這句話理解起來並不是那麼容易),包括函式(C#,JAVA中函式不能獨立存在)。這裡貼一篇以前寫的文章: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...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.
應該避免的名稱
- 單字元名稱, 除了計數器和迭代器.
- 包/模組名中的連字元(-)
- 雙下劃線開頭並結尾的名稱(Python保留, 例如__init__)
命名約定
- 所謂”內部(Internal)”表示僅模組內可用, 或者, 在類內是保護或私有的.
- 用單下劃線(_)開頭表示模組變數或函式是protected的(使用import * from時不會包含).
- 用雙下劃線(__)開頭的例項變數或方法表示類內私有.
- 將相關的類和頂級函式放在同一個模組裡. 不像Java, 沒必要限制一個類一個模組.
- 對類名使用大寫字母開頭的單詞(如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.C
和B.C
,分別表示A包中的C模組和B包中的C模組。 -
匯入模組:
import a
、import a as alias
、from 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
相關文章
- Python基礎知識點梳理Python
- web知識梳理Web
- JavaWeb知識梳理JavaWeb
- Mysql知識梳理MySql
- webpack 知識梳理Web
- Python教程分享之Python基礎知識點梳理Python
- Python培訓教程之Python基礎知識點梳理Python
- react 知識梳理(一)React
- MongoDB基礎知識梳理MongoDB
- kafka基礎知識梳理Kafka
- js基礎知識梳理JS
- 信管知識梳理(三)軟體工程相關知識軟體工程
- 【整理】JVM知識點大梳理JVM
- Java基礎知識點梳理Java
- JS函式知識點梳理JS函式
- JVM面試知識點梳理JVM面試
- Flex 佈局知識點梳理Flex
- Docker 知識梳理及其安裝使用Docker
- 【CURSOR】Oracle 遊標 (cursor)知識梳理Oracle
- 前端---梳理 http 知識體系 1前端HTTP
- javascript正規表示式 | 知識梳理JavaScript
- 基礎知識梳理~資料庫資料庫
- 前端---梳理 http 知識體系 2前端HTTP
- 【INDEX】Oracle 索引常見知識梳理IndexOracle索引
- 圖片上傳知識點梳理
- Redux 知識點梳理和實踐Redux
- AcWing 進階課知識點模板梳理
- 跟我一起梳理MongoDB基本知識MongoDB
- 【ORACLE】Oracle繫結變數知識梳理Oracle變數
- git實用知識梳理(二)分支管理Git
- 一起來梳理JVM知識點JVM
- web前端知識梳理——HTML5(一)Web前端HTML
- python面試中較常問及的知識點梳理---高階特性Python面試
- 【知識】圖論 朱劉演算法梳理圖論演算法
- 多執行緒基礎知識點梳理執行緒
- 超全面的Linux基礎知識的梳理Linux
- 《面試補習》- JVM知識點大梳理面試JVM
- 《面試補習》- Java鎖知識大梳理面試Java