天天看點

Python的特性和基本文法

作者:茶桁

千裡之行始于足下。

大家好,我是茶桁,這裡是我們《AI秘籍》的第一節,讓我們先從Python來開始好好的打好基礎。

第一堂課,我們先從最基礎的Python特性開始,當然,還有一些基本文法。

上來就開始講特性和文法,說明我們将會遺棄慣用的“環境搭建”等更基礎的内容,那些内容網上已經很豐富了,一查一大堆,并且相對來說内容都比較獨立,是以希望還不太會搭建開發環境的同學可以自己去搜尋看看。或者,其實從我這篇《Apple M1的AI環境搭建》也能完全搭建起一個完整的Python開發環境。(Windows和Linux的同學就隻能在網上搜尋一下看看了。)

總體來說,Python語言的使用率越來越高,它不僅可以用于GUI開發、Web開發,還能進行資料預處理、資料探索性分析(EDA),更是進行資料挖掘、機器學習、深度學習等任務的首選語言。

基于Python的包也越來越豐富,各種優秀的庫層出不窮。根據"Tiobe程式設計語言排行榜"的最新統計,Python結束了自己攀爬的勢頭,已經開始長期占據榜首。Python的發展勢頭讓人們看到了它在各個領域都有着廣闊的應用前景。

Python的特性和基本文法

得益于Python語言的簡潔文法和高效開發能力,使得內建系統變得非常友善。

與此同時,Python相關的就業機會也非常豐富,待遇也相當優渥。

是以,無論從易用性、就業機會還是薪酬待遇來看,Python都是IT從業者必備的程式設計語言之一。

課程說明

  1. 本課程所使用語言為Python3
  2. 本課程将會有一些案例,用于輔助學習和了解知識點。
  3. 基本所有案例均使用Jupyter Notebook做示範
  4. 一些項目會用到軟體工程和設計模式的思想。
  5. 本課程無任何文學色彩,重點在于簡單通俗易懂。

接下來,讓我們真實開始吧。

Python的兩大特性

一句話總結,就是Python是一門動态的、強類型語言。

動态語言

在了解“動态語言”之前,我們先來了解一下“類型檢查”。

類型檢查是驗證變量或表達式的資料類型是否符合語言規定的類型限制的過程。它用于確定程式在運作時不會出現類型錯誤,例如将一個字元串與一個整數相加或将一個數字與一個布爾值進行比較。類型檢查旨在捕捉潛在的類型不比對錯誤,并在編譯時或運作時提供相應的警告或錯誤資訊。

如果類型檢查發生在程式運作階段(運作時),則稱為"動态類型語言"(dynamically typed languages)。常見的動态語言包括:

  • Python
  • JavaScript
  • Ruby
  • PHP
  • Lua
  • Perl
  • Shell腳本

有動态語言,則必然會有其相對的“靜态語言”,常見的“靜态類語言”包含:

  • C
  • C++
  • Java
  • C#
  • Swift
  • Kotlin
  • Rust
  • TypeScript

當然,這些都隻是一部分常見的動态語言和靜态類型語言,還有許多其他程式設計語言也屬于這兩個類别。在實際開發中,選擇使用動态語言還是靜态類型語言取決于項目的需求、開發團隊的喜好和項目的規模等因素。每種類型的語言都有其獨特的特點和适用場景,是以選擇合适的語言是非常重要的。

強類型語言

強類型語言(Strongly Typed Language)要求在程式設計過程中嚴格定義和遵守資料類型規則。在強類型語言中,變量必須明确地聲明其資料類型,并且在運作時不能隐式地改變資料類型。這意味着變量在使用之前必須進行類型轉換,以確定資料的一緻性和安全性。

在強類型語言中,編譯器或解釋器會對資料類型進行嚴格的檢查,如果發現不符合類型規則的操作,就會報錯并拒絕執行。這樣可以防止一些潛在的類型錯誤,確定程式的穩定性和正确性。

強類型語言的主要特點包括:

  1. 靜态類型檢查:在編譯時或解釋時進行類型檢查,檢查資料類型是否比對,避免類型不比對的錯誤。
  2. 顯式類型轉換:在進行類型轉換時,必須顯式地指定轉換的方式,例如強制類型轉換。
  3. 不支援隐式類型轉換:強類型語言不允許在不明确聲明的情況下将一個資料類型隐式地轉換為另一個資料類型。

這麼說可能并不直接,我們來拿個示例,我們輸入兩行代碼:

a = 5
 a = a + 's'           

然後我們會看到程式抛出TypeError異常:

Python的特性和基本文法

這個異常意思是不支援int變量和str變量相加。

常見的強類型語言包括:

  • Java
  • C++
  • C#
  • Python
  • Swift
  • Kotlin
  • TypeScript
  • Rust
  • Pascal
  • Ada
  • Delphi

一樣的,對應的就是弱類型語言。弱類型語言容易與其他類型混合計算,其代表是JavaScript。(有一說一,我還挺喜歡JS的這個特性的)

Python的特性和基本文法

弱類型語言包括:

  • JavaScript
  • PHP
  • Perl
  • Ruby
  • Tcl
  • Bash
  • AWK
  • MATLAB (在一些操作上可以被視為弱類型)
當然,對于這個劃分其實并不是所有人都一緻的,有些人還是會把Python歸結為弱類型語言,而通常意義上,大家會把C++劃分到弱類型。這裡我們不去争論,僅僅記住動态/靜态、弱類型/強類型的差別就行了。

基本文法

基本文法裡,我們介紹一下Python的命名規則、縮進原則、特殊關鍵字和特殊運算符四個方面。

命名規則

Python的變量命名規則包括以下幾條:

  1. 允許包括英文、數字以及下劃線(_),不能以數字開頭。
  2. 名稱區分大小寫,例如"myVar"和"myvar"是兩個不同的變量。
  3. 以單下劃線(_)開頭的變量通常用作受保護的變量,表示應該将其視為私有,不建議直接通路。雖然Python沒有嚴格的通路控制,但這是一種約定俗成的做法。
  4. 以雙下劃線(__)開頭和結尾的變量是Python中的特殊辨別符,具有特殊的意義,如類的私有成員或專用辨別符。

Python的變量命名習慣一般遵守蛇形命名法(snake case):

  1. 一般變量命名使用小寫字母,多個單詞之間用下劃線連接配接,例如:book_id、book_store_count。
  2. 類名首字母大寫,如Python内置子產品collections.abc中的Iterable類,我們自定義的Book類等。
  3. 類方法名也使用小寫字母,多個單詞之間用下劃線連接配接,例如:get_store_count()。

與Java的命名方法不同,Java通常使用駝峰命名法(camel case)來命名變量和方法名,其中第一個單詞首字母小寫,後續單詞首字母大寫,例如:myVar、getStoreCount()。而Python則更傾向于使用蛇形命名法。這是因為Python社群普遍認可了蛇形命名法,使得代碼在風格上更加一緻和易讀。

縮進原則

Python最具特色的特點之一是使用縮進來表示代碼的邏輯層次,而不是像Java和C++中使用{}。Python的縮進層級結構非常重要,它代表着代碼的邏輯結構。

通常情況下,Python的縮進為4個空格字元。例如,在定義一個Book類并重寫add方法來計算兩本書的庫存量時,代碼如下所示:

class Book(object):
     
     # 定義類的參數
     def __init__(self, b_id, b_name, b_store_count):
         self.b_id = b_id
         self.b_name = b_name
         self.b_store_count = b_store_count
 
     # 重寫加法操作
     def __add__(self, book):
         return self.b_store_count + book.b_store_count
     
 # 建立兩個Book類的執行個體
 python_intro_book = Book(1, '金瓶梅', 100)
 ml_intro_book = Book(2, '玉蒲團', 200)
 
 # 求兩本書的總銷量
 sales_cnt = python_intro_book + ml_intro_book
 print(sales_cnt)            

上述代碼定義了一個Book類,包括初始化方法__init__和重寫的加法操作__add__。通過這種縮進結構,我們可以清晰地看到代碼的層次結構和邏輯。

在Python編碼中,縮進格式、行間空行數、變量和等号之間的空格等都遵循PEP8(Python Enhancement Proposal 8)規範。可以使用autopep8包來自動實作PEP8規範,保持代碼的規範和易讀性。

特殊關鍵字

Python有35個關鍵字,這些關鍵字具有特殊的含義,不能用于自定義變量名,否則會引起文法錯誤。以下是Python的關鍵字清單:

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           

這些關鍵字在Python程式設計中扮演着重要的角色。其中,True和False用于表示布爾值的真和假,類似于Java中的true和false;None表示空值,類似于Java中的null;Python使用not表示邏輯反操作,而Java使用!;Python使用and表示兩個條件同時滿足,Java使用&&;Python使用or表示兩個條件滿足其一,Java使用||;Python使用elif,而Java使用else if。

還有一些比較特殊的關鍵字,例如:

  • del用于删除可疊代對象中的某個元素;
  • def用于定義函數;
  • 帶有yield的關鍵字用于定義生成器(generator)函數;
  • global和nonlocal是在Python函數式程式設計的閉包場景中使用的。

pass關鍵字用于占位,當你在定義函數或類時暫時不想添加具體的實作時,可以使用pass關鍵字。

這些關鍵字的具體用法将在後續文章中更詳細地介紹。在此,先對它們有一個整體的認識即可。

特殊運算符

Python的運算符包括:

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

大部分運算符在其他程式設計語言中也是常見的,不過這裡重點介紹三個比較特殊的運算符://、**和:=。

//運算符用于兩個數值相除并向下取整,類似于Python的math.floor()功能:

print(5 // 2)   # 輸出: 2
 print(5 // 4.5) # 輸出: 1.0           

**運算符用于進行幂運算:

print(2 ** 3) # 輸出: 8           

:=運算符是在Python 3.8版本中引入的,被形象地稱為“海象運算符”。它可以在表達式中同時為變量指派和比較:

n = len(a)
 if n > 10:
     print(f"{n}大于10")           

可以用“海象運算符”簡化為:

if (n := len(a)) > 10:
     print(f"{n}大于10")           

Python的比較運算符還支援鍊式比較,使得編碼更加友善:

i = 3
 print(1 < i < 3)  # 輸出: False
 print(1 < i <= 3) # 輸出: True           

此外,運算符@用于裝飾器功能,本專欄會深入解釋它的本質,并提供相關案例,幫助你學會使用裝飾器。

總結

在本文中,我們一起學習了Python這門功能強大的程式設計語言。Python的兩大特性是動态語言和強類型語言。

動态語言意味着在運作時執行類型檢查,而不是在編譯時。這使得Python更加靈活和易于使用,允許我們在代碼中動态建立和修改變量。Python的動态特性使其成為進行資料預處理、資料探索性分析、資料挖掘、機器學習和深度學習等任務的首選語言。

另一方面,強類型語言意味着變量的類型在聲明時就已經确定,并且不能進行隐式類型轉換。這確定了代碼的穩定性和安全性,幫助我們避免一些常見的錯誤。

在Python的基本文法方面,我們學習了變量命名規則,縮進原則,特殊關鍵字和特殊運算符。Python的命名規則允許使用英文、數字和下劃線,但不能以數字開頭,并且區分大小寫。特殊關鍵字包括Python的35個關鍵字,如if、else、for、while等等,它們有着特定的含義和用途。特殊運算符中,//用于整數除法,**用于幂運算,:=是在Python 3.8版本中引入的“海象運算符”,使得在表達式中同時為變量指派和比較變得更加友善。

通過學習Python的特性和基本文法,我們已經具備了編寫簡單到複雜的程式的基礎知識。Python的易用性、豐富的庫和社群支援,使其成為一個優秀的程式設計語言,适用于各種應用場景。無論是初學者還是有經驗的開發者,Python都是一個值得深入學習和探索的語言。

希望本文能夠為讀者提供了一個對Python的初步認識,并激發了你繼續學習和研究的興趣。在接下來的學習過程中,我們可以更深入地了解Python的各種功能和應用領域,并用Python來解決更複雜的問題。

好了,我是茶桁,咱們下節見。