可讀性的驚人 Python/ target=_blank class=infotextkey>Python 代碼片段
Python 是一種通用編程語言,可用于構建任何規模的項目,并為開發人員提供編寫邏輯清晰代碼的條件——即使是大型項目。
Python 的設計理念通過強制使用縮進來顯式定義代碼塊來促進代碼的可讀性。但是,僅僅擁有良好縮進的代碼并不一定意味著您的代碼也清晰且編寫良好。
“可讀性很重要。” — Python之禪
與大多數其他通用編程語言相比,Python 的最大優勢之一是它不那么冗長。不過,為了簡潔而犧牲代碼的可讀性絕不是一個好主意。在許多情況下,單線可能弊大于利。試圖通過將(復雜的)語句放在一起來減少代碼行數實際上會破壞代碼的可讀性。
話雖如此,單行代碼還可以幫助您保持代碼整潔并使其看起來更加 Pythonic。在本文中,我們將探討一些這樣的案例,并了解如何在常見的編程結構中使用有用的單行代碼。
1.合并字典
從 Python 3.9 開始,您只需使用|運算符即可合并字典:
dict1 = {'a': 1, 'b': 2}dict2 = {'b': 3, 'c': 4, 'd': 5}dict1 | dict2
按備用鍵排序
有時,我們需要通過備用鍵對元素列表進行排序
sorted([-5, -1, 2, 3, 4], key=lambda x: abs(x))
展開列表中的列表
當我們需要展開列表中的列表時。列表迭代應該可以解決問題:
nested_lists = [[1, 2], [3, 4, 5], [6]][item for inner_list in nested_lists for item in inner_list]
交換變量
在大多數編程語言中,為了交換兩個變量的值,我們需要引入第三個臨時變量。在 Python 中,這可以通過單行來實現
a = 10b = 20a, b = b, aprint(a,b)
為多個變量賦值
a, b, c = 10, False, 'Hello World'
打開文件
與文件等資源進行交互是日常編程中的常見任務。一個典型的用例是當我們需要讀取文件的內容時。您可以使用上下文管理器,而不是花費時間和代碼行來與資源交互并捕獲錯誤,如下所示。
Python 中的上下文管理器是一個定義運行時上下文并在進入上下文之前和退出上下文之后實現特定功能的對象。
該with語句將打開文件并在運行時上下文終止后(或出現問題時)自動關閉它:
with open('file.txt','r') as f:content = f.readlines()
多格式輸出字符串
>>> n_processes = 1>>> f"{n_processes} process{' is' if n_processes == 1 else 'es are'} running"'1 process is running'>>> n_processes = 2>>> f"{ n_processes} process{' is' if n_processes == 1 else 'es are'} running"
Lambda 函數
Lambda 函數是單表達式匿名函數。它們可以幫助您編寫簡潔的內聯函數
>>> circle_area = lambda r: math.pi * (r ** 2)>>> circle_area(10)
map函數
我們經常需要對一組元素應用一個函數,這正是這樣map()函數做的事情
>>> nums = [1, 2, 3, 4, 5]>>> nums_squared = list(map(lambda n: n**2, nums))>>> nums_squared[1, 4, 9, 16, 25 ]
計算累計和
itertools.accumulate()如果需要計算數值的累積/運行總和,這是一個完美的函數。
>>> import itertools>>> list(itertools.accumulate([1, 2, 3, 4, 5]))[1, 3, 6, 10, 15]
列表、集合和字典推導
列表、集合或字典推導可以幫助您編寫更清晰、更 Pythonic 的代碼。可以僅在一行中使用推導式,而不是使用傳統的循環。
例如,為了過濾列表,可以使用以下約定:
>>> numbers = [1, 2, 3, 4, 5]>>> [num for num in numbers if num > 3][4, 5]
感謝閱讀,hAppy code!