天天看點

Python知識梳理

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

極簡教程

資料類型

我們可以使用

type()

函數類擷取對象的類型,Python3中内置資料類型包括:

None,int,float,complex,str,list,dict,tuple,set,frozenset,range

等,Python2中還有

long

類型,Python中并沒有内置數組類型。

dict,list,set

這些是可變類型(使用者自定義類型也可變),可以改變類型對象的值;數值和字元串類型則是不可變的。

  • str 與js一樣,python中字元串即可用單引号也可用雙引号表示
  • numbers Python3中數值類型有:

    int

    float

    兩種
  • list 字面量表示:[1,1.0,False,'list']
清單推導式

,建立清單的一種簡易方法:

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

對象模型

的重要部分。

可以動态的給對象/類型添加屬性,若給類型添加屬性,則該屬性在已産生的執行個體上也是可見的:

異常與錯誤

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
Classes CapWords _CapWords
Exceptions
Functions lower_with_under() _lower_with_under()
Global/Class Constants CAPS_WITH_UNDER _CAPS_WITH_UNDER
Global/Class Variables
Instance Variables _lower_with_under (protected) or __lower_with_under (private)
Method Names _lower_with_under() (protected) or __lower_with_under() (private)
Function/Method Parameters
Local Variables

包與子產品

  • 子產品 包含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 \r\n 文本内容"
        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