1. 程式人生 > 實用技巧 >Day 1:Python 兩大特性和四大基本語法

Day 1:Python 兩大特性和四大基本語法

這是買的課程,我的筆記(copy),若有侵權請聯絡,謝謝


Python 語言兩大特性

Python 是一門動態的、強型別語言。

什麼是動態語言?

要了解什麼是動態語言,要首先了解“型別檢查”。即什麼時候“變數”和它們的”型別”,然後判斷表示式是否合理。型別檢查是驗證型別約束的過程,編譯器或直譯器通常在編譯階段或執行階段做型別檢查。

如果型別檢查發生在程式執行階段(run time),那麼它便是“動態型別語言”(dynamically typed languages)。常見的動態語言包括:

  • Python
  • JavaScrpit
  • PHP

型別檢查發生在“編譯階段”(compile time)的是“靜態型別語言”(statically typed languages)。常見的靜態型別語言包括:

  • C
  • C++
  • Java
  • C#
  • Scala

什麼是強型別語言?

強型別語言是指:不管是在編譯階段還是執行階段,一旦某種型別繫結到變數後,此變數便會持有此型別,並且不能同其他型別在計算表示式時,混合使用。

例如,如果一個整形和字元型別做‘+’運算,會丟擲TypeError:

>>> a = 5
>>> a = a + 'a' 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

常見的強型別語言有:

  • Python
  • Java
  • C#
  • Scala

與之對應的是弱型別語言,弱型別語言容易與其他型別混合計算。弱型別語言代表 JavaScript。for example:

var data =5

data = data +'xiaoming'//string 和 int 結合自動轉化為 string.

常見的弱型別語言有:

  • C
  • C++
  • PHP
  • Javascript


四大基本語法

變數命名規則、縮排原則、特殊關鍵字和特殊運算子 for Python的基本語法

命名規則

主要包括兩條:

  • 允許包括英文、數字以及下劃線(_),不能以數字開頭
  • 名稱區分大小寫

特別說明以“下劃線”開頭的變數是有特殊意義的:

  • 類變數若以單下劃線(_)開頭,代表不能直接被訪問,類似於 C# 的受保護型變數(protected),表示不能通過import module_name而匯入。
  • 類變數若以雙下劃(__)開頭,表示為類的私有成員,不能被匯入和其他類變數訪問。
  • 以雙下劃開頭和雙下劃線結尾的變數是 Python 裡的專用標識,有特殊的身份。

如 Python 自定義類中都包括 __init__ 和 __add__ 方法,如果不重寫 __add__ 去執行兩個類加法操作,程式會拋 TypeError 異常。

命名法:推薦蛇形命名法(snake case)

  • 一般變數命名,book_id、book_store_count;
  • 類名首字元為大寫,如 Python 內建模組 collections.abc 中的 Iterable 類、我們自定義的 Book 類等;
  • 類方法名:get_store_count();
  • 其他特殊變數,會全部大寫,M_PI、MAX_VEHICLE_SPEED。

Java 最典型的命名方法——駝峰命名法(camel case)。

縮排原則

Python最具特色的地方就是用縮排代替Java、C++ 中的{},縮排的層級結構表示程式碼的邏輯層次。

Python 的縮排方法,一般為 4 個字元。

舉例,自定義一個 Book 類,重寫 __add__ 方法計算兩類書的庫存量和:

class Book(object):
    # 定義類的引數
    def __init__(self,book_id, book_name, book_store_count):
        self.book_id = book_id
        self.book_name = book_name
        self.book_store_count = book_store_count
    # 重寫加法操作    
    def __add__(self,book):
        return self.book_store_count + book.book_store_count

# 建立兩個 Book 類的例項:
python_intro_book = Book(1,'python入門書',100) 
ml_intro_book = Book(2,'機器學習入門書',200)
# 求兩本書的總銷量
sales_cnt = python_intro_book + ml_intro_book
print(sales_cnt) # 30

remark:

Python 自定義類中都包括 __init__ 和 __add__ 方法,如果不重寫 __add__ 去執行兩個類加法操作,程式會拋 TypeError 異常。只有重寫後,程式才能正常執行加法操作。

小知識:autopep8 包遵循 PEP8 的所有規範,安裝此包,做好相關配置,便可自動實現 PEP8 制定的編碼規範。

特殊關鍵字

Python 有 35 個關鍵字:(自定義變數名不能與它們重複。)

False      await      else       import     pass
None       break      except     in         raise
True       class      finally    is         return
and        continue   for        lambda     try
as         def        from       nonlocal   while
assert     del        global     not        with
async      elif       if         or         yield

常用關鍵字:

  • TrueFalse用於表示值的真假,在 Java 中是truefalse
  • 邏輯反操作 Python 使用not,Java 是!
  • None表示空值,Java 使用null
  • Python 兩個條件同時滿足使用and,Java 是&&
  • 兩者滿足其一,Python 使用or,Java 使用||
  • Python 使用elif, Java 是else if

其他比較特殊的關鍵字,如:

  • del用於刪除可迭代物件中某個元素;
  • def用於定義函式;
  • yield用於定義生成器(generator)函式;
  • globalnonlocal一種應用是 Python 函數語言程式設計的閉包場景;
  • pass一種應用是定義介面,也是 Python 語言特有的一個關鍵字。

特殊運算子

Python 的運算子包括:

+       -       *       **      /       //      %      @
<<      >>      &       |       ^       ~       :=
<       >       <=      >=      ==      !=

點介紹 3 個比較特殊的://**:=

//用於兩個數值相除且向下取整

>>> 5//2
2   
>>> 5/2.1
2.380952380952381
>>> 5//2.1
2.0 
>>> 

**用於冪運算:

>>> 2**3
8
>>>

:= 是在 2019 年,Python 3.8 版本里,剛剛才被支援的運算子,被形象地稱為“海象運算子”。

這樣可以精簡程式碼的書寫,比如:

>>> a = 'sdasd'
>>> n = len(a)  
>>> if n>10:
...     print(f"{n}大於10") 
... 
>>> 


改寫為:

 >>> a = 'sdsasdasdasdasd'
 >>> if (n :=len(a)) > 10:
 ... print(f"{n}大於10")
 ...
 15大於10
 >>>

另外,Python 比較運算子還支援鏈式比較,應用起來更加方便,比如:

>>> i =3
>>> print(1<i<3) 
False
>>> print(1<i<=3) 
True
>>>

另外,運算子@用於裝飾器功能(後面細說)。