Python 字典

字典是一種非常重要的 Python 資料結構。 列表可以用來創建值的集合,而字典則可以創建鍵 / 值對的集合。 這是一個包含一個鍵值對的字典範例: dog = { 'name': 'Roger' } 鍵可以是任何不可變的值,例如字串、數字或元組。值可以是任何你想要的資料。 字典可以包含多個鍵值對: dog = { 'name': 'Roger', 'age': 8 } 你可以使用下面的語法來訪問單個鍵的值: dog['name'] # 'Roger' dog['age'] # 8 使用相同的語法,你可以更改特定位置存儲的值: dog['name'] = 'Syd' 另一種方法是使用 get() 方法,該方法可以添加默認值: dog.get('name') # 'Roger' dog.get('test', 'default') # 'default' pop() 方法檢索鍵的值,並從字典中刪除該項目: dog.pop('name') # 'Roger' popitem() 方法檢索並刪除最後插入字典的鍵/值對: dog.popitem() 你可以利用 in 運算符來檢查一個鍵是否包含在字典中: 'name' in dog # True 使用 keys() 方法可以獲取字典中的所有鍵,並將結果傳遞給 list() 構造函數: list(dog.keys()) # ['name', 'age'] 使用 values() 方法可以獲取字典中的所有值,並使用 items() 方法獲取鍵/值對的元組:...

Python 函式

函式可以讓我們創建一組需要時可以運行的指令。 在 Python 和許多其他程式語言中,函式是創建有意義的程式的關鍵,因為它們允許我們將一個程式分解為易於管理的部分,並促進代碼的可讀性和重用。 這是一個名為 hello 的例子函式,它會打印出 “Hello!": def hello(): print('Hello!') 這是函式的定義。它有一個名字 (hello) 和一個主體,即一組指令,該部分位於冒號之後,並且向右縮進了一級。 要運行這個函式,我們必須呼叫它。以下是呼叫函式的語法: hello() 我們可以執行這個函式一次,或者多次。 函式的名字 hello 非常重要,它應該具有描述性,這樣任何調用它的人都能想象出函式的功能。 函式可以接受一個或多個參數: def hello(name): print('Hello ' + name + '!') 在這種情況下,我們呼叫函式並傳遞參數: hello('Roger') 我們把函式定義內接受的值稱為參數,而在呼叫函式時傳遞的值稱為參數。人們常常會對此混淆不清。 參數可以有一個預設值,如果該參數未指定,則應用預設值: def hello(name='my friend'): print('Hello ' + name + '!') hello() #Hello my friend! 以下是如何接受多個參數的示例: def hello(name, age): print('Hello ' + name + ', you are ' + str(age) + ' years old!') 在這種情況下,我們呼叫函式並傳遞一組參數: hello('Roger', 8) 參數是按引用傳遞的。在 Python 中,所有類型都是對象,但其中一些是不可變的,包括整數、布林值、浮點數、字符串和元組。這意味著如果您將它們作為參數傳遞並在函式內部修改它們的值,則新值不會反映在函式外部:...

Python 控制語句

使用布林值和返回布林值的表達式,我們可以根據它們的 True 或 False 值來做出決策並選擇不同的路徑。 在 Python 中,我們可以使用 if 語句來實現這一點: condition = True if condition == True: # 執行某些操作 當條件測試結果為 True 時,像上面的例子一樣,它的代碼塊就會被執行。 什麼是代碼塊?代碼塊是縮進了一級(通常是4個空格)的程式碼塊類型: condition = True if condition == True: print("這個條件") print("是真的") 代碼塊可以由單行或多行代碼構成,並且在回到先前縮進級別時結束: condition = True if condition == True: print("這個條件") print("是真的") print("if 語句之外") 結合 if 語句,還可以使用 else 代碼塊,在條件測試結果為 False 時執行: condition = True if condition == True: print("這個條件") print("是真的") else: print("這個條件") print("是假的") 你還可以使用 elif 搭配不同的連接 if 條件來進行多重檢測,如果前一個檢測為 False 時執行:...

Python 閉包

之前我們已經看過如何在 Python 中建立巢狀函式。 如果從函式中返回一個巢狀函式,那個巢狀函式可以訪問該函式中定義的變數,即使該函式已經不再活動。 以下是一個簡單的計數器範例。 def counter(): count = 0 def increment(): nonlocal count count = count + 1 return count return increment increment = counter() print(increment()) # 1 print(increment()) # 2 print(increment()) # 3 我們返回了 increment() 內部函式,而該函式仍然可以訪問到 count 變數的狀態,即使 counter() 函式已經結束。

Python 循環

循環是程式設計中一個重要的部分。 在 Python 中,我們有兩種類型的循環:while 循環和 for 循環。 while 循環 使用 while 關鍵字定義 while 循環,直到條件求值為 False,它會重複執行其區塊: condition = True while condition == True: print("條件為 True") 這是一個無窮循環,它永遠不會結束。 讓我們在第一次迭代後停止循環: condition = True while condition == True: print("條件為 True") condition = False print("循環結束後") 在這個案例中,第一次迭代運行,因為條件測試求值為 True,第二次迭代時條件測試求值為 False,所以控制權轉移到循環後的下一條指令。 通常會有一個計數器,在某些循環之後停止迭代一定次數: count = 0 while count < 10: print("條件為 True") count = count + 1 print("循環結束後") for 循環 使用 for 循環,我們可以告訴 Python 在預先決定的次數內執行一個區塊,而無需使用獨立的變數和條件來檢查其值。 例如,我們可以迭代列表中的項目: items = [1, 2, 3, 4] for item in items: print(item) 或者,您可以使用 range() 函數迭代指定的次數:...

Python 虛擬環境

在您的系統上運行多個 Python 應用程序很常見。 當應用程序需要相同的模塊時,您可能會遇到一個棘手的情況,其中一個應用程序需要一個模塊的版本,而另一個應用程序需要該模塊的不同版本。 為了解決這個問題,您可以使用 虛擬環境。 我們將使用 venv,其他工具的運作方式類似,比如 pipenv。 使用以下命令在您要啟動項目的文件夾中創建一個虛擬環境: python -m venv .venv 或者在已經存在的項目所在的文件夾中運行該命令。 然後運行以下命令: source .venv/bin/activate 在 Fish shell 中,請使用 source .venv/bin/activate.fish 執行該程序將啟用 Python 虛擬環境。根據您的配置,您可能還會看到終端提示符發生變化。 我的提示符從 ➜ 文件夾 變成了 (.venv) ➜ 文件夾 現在運行 pip 將使用這個虛擬環境,而不是全局環境。

Python 集合

集合是Python中另一個重要的資料結構。 我們可以說它們和元組(tuples)的運作方式相似,但它們並不是有序的,且它們是可變的。 或者我們可以說它們和字典(dictionaries)的運作方式相似,但它們沒有鍵(keys)。 它們還有一個不可變的版本,稱為frozenset。 你可以使用以下語法來建立一個集合: names = {"Roger", "Syd"} 當你把集合當作數學集合時,它們的運作效果很好。 你可以取兩個集合的交集: set1 = {"Roger", "Syd"} set2 = {"Roger"} intersect = set1 & set2 #{'Roger'} 你可以將兩個集合合併: set1 = {"Roger", "Syd"} set2 = {"Luna"} union = set1 | set2 #{'Syd', 'Luna', 'Roger'} 你可以獲取兩個集合之間的差異: set1 = {"Roger", "Syd"} set2 = {"Roger"} difference = set1 - set2 #{'Syd'} 你可以檢查一個集合是否為另一個集合的超集(當然也可以檢查一個集合是否為另一個集合的子集): set1 = {"Roger", "Syd"} set2 = {"Roger"} isSuperset = set1 > set2 # True 你可以使用len()全局函數計算集合中的項目數量:...

Python 裝飾器

裝飾器是一種改變、增強或以任何方式修改函數運作方式的方法。 使用裝飾器可以在函數定義之前使用@符號以及裝飾器名稱來定義裝飾器。 例如: @logtime def hello(): print('hello!') 這個 hello 函數有一個被指定為 logtime 的裝飾器。 每當我們呼叫 hello() 時,裝飾器會被呼叫。 裝飾器是一個接受函數作為參數的函數,它將函數包裝在一個執行特定任務的內部函數中,然後返回該內部函數。換句話說: def logtime(func): def wrapper(): # 在執行前做一些事情 val = func() # 在執行後做一些事情 return val return wrapper

Python 運算子

Python 運算子是我們用來對值和變數執行操作的符號。 我們可以根據它們執行的操作種類將運算子分為以下幾類: 指派運算子 算術運算子 比較運算子 邏輯運算子 位元運算子 還有一些有趣的運算子,比如 is 和 in。 指派運算子 指派運算子用於將值賦予一個變數: age = 8 或者將一個變數的值賦予另一個變數: age = 8 anotherVariable = age 自 Python 3.8 開始,:= 名為「齊肩大象運算子(walrus operator)」的運算子可以在另一個操作的一部分中將值賦予變數。例如,在 if 語句中或在循環的條件部分中使用。稍後將更詳細地談到。 算術運算子 Python 有許多算術運算子:+、-、*、/(除法)、%(取餘數)、**(幂運算)和 //(整數除法): 1 + 1 #2 2 - 1 #1 2 * 2 #4 4 / 2 #2 4 % 3 #1 4 ** 2 #16 4 // 2 #2 注意,操作數之間不需要空格,但為了可讀性,最好空一格。 - 也可以作為一元負號運算子使用: print(-4) #-4 + 也用於連接字符串值:...

Python 遞迴

Python 中的函數可以呼叫自己,這就是遞迴。在許多情境中,遞迴是非常有用的。 通常用階乘計算來解釋遞迴。一個數字的階乘即是該數字 n 乘上 n-1,再乘上 n-2…,一直到達 1 為止: 3! = 3 × 2 × 1 = 6 4! = 4 × 3 × 2 × 1 = 24 5! = 5 × 4 × 3 × 2 × 1 = 120 利用遞迴,我們可以撰寫一個函數來計算任何數字的階乘: def factorial(n): if n == 1: return 1 return n × factorial(n-1) print(factorial(3)) # 6 print(factorial(4)) # 24 print(factorial(5)) # 120 如果在 factorial() 函數內呼叫的是 factorial(n) 而不是 factorial(n-1),將會導致無窮遞迴。Python 預設會在執行 1000 次遞迴後停止,當達到這個限制時,你將會得到一個 RecursionError 錯誤。...