掌握這些 Python 函數,讓你的代碼更簡潔優雅

在 Python 編程世界里,代碼的簡潔性與可讀性至關重要。簡潔優雅的代碼不僅便于自己后期維護,也能讓其他開發者快速理解邏輯。而 Python 豐富的內置函數和一些實用的第三方庫函數,就是實現這一目標的有力武器。接下來,就為大家介紹幾個能讓代碼“脫胎換骨”的函數,助力寫出簡潔又優雅的代碼。

?

?

一、?map? 函數:批量操作元素

?

?map? 函數接收兩個參數,一個是函數,一個是可迭代對象(比如列表、元組等 ),它會將傳入的函數依次作用到可迭代對象的每個元素上,返回一個新的迭代器。

?

場景示例:列表元素平方

?

如果要對一個列表 ?nums = [1, 2, 3, 4]? 中的每個元素求平方,常規的 ?for? 循環寫法是這樣:

?

nums = [1, 2, 3, 4]

result = []

for num in nums:

? ? result.append(num ** 2)

print(result)??

?

?

用 ?map? 函數則簡潔很多:

?

nums = [1, 2, 3, 4]

result = map(lambda x: x ** 2, nums)

# 轉為列表查看結果,實際使用中若后續迭代可直接用迭代器

print(list(result))??

?

?

這里利用 ?lambda? 匿名函數配合 ?map?,一行代碼就完成了對列表所有元素的平方操作,省去了手動初始化空列表、寫循環體的步驟,代碼更緊湊。

?

二、?filter? 函數:精準篩選元素

?

?filter? 函數同樣接收函數和可迭代對象作為參數,傳入的函數需返回布爾值,它會篩選出可迭代對象中使函數返回 ?True? 的元素,返回一個迭代器。

?

場景示例:篩選列表中的偶數

?

對于列表 ?nums = [1, 2, 3, 4, 5, 6]?,要篩選出其中的偶數,常規循環:

?

nums = [1, 2, 3, 4, 5, 6]

result = []

for num in nums:

? ? if num % 2 == 0:

? ? ? ? result.append(num)

print(result)??

?

?

用 ?filter? 函數:

?

nums = [1, 2, 3, 4, 5, 6]

result = filter(lambda x: x % 2 == 0, nums)

print(list(result))??

?

?

借助 ?filter? ,把篩選邏輯(判斷是否為偶數 )提煉成函數(這里用 ?lambda? ),直接篩選出符合條件的元素,代碼邏輯清晰又簡潔。

?

三、?zip? 函數:高效聚合多個可迭代對象

?

?zip? 函數能將多個可迭代對象中對應位置的元素打包成元組,返回一個迭代器。當你需要同時遍歷多個可迭代對象,取出對應位置元素進行操作時,它非常好用。

?

場景示例:合并兩個列表對應元素

?

有兩個列表 ?names = ["Alice", "Bob"]?,?ages = [20, 25]?,要將姓名和年齡一一對應合并,常規思路可能用索引遍歷:

?

names = ["Alice", "Bob"]

ages = [20, 25]

result = []

for i in range(len(names)):

? ? result.append((names[i], ages[i]))

print(result)??

?

?

用 ?zip? 函數:

?

names = ["Alice", "Bob"]

ages = [20, 25]

result = zip(names, ages)

print(list(result))??

?

?

?zip? 自動幫我們把對應位置元素配對,代碼簡潔直觀,尤其當可迭代對象數量更多時,優勢更明顯,比如三個列表 ?a = [1,2]?, ?b = [3,4]?, ?c = [5,6]? ,?zip(a,b,c)? 能輕松打包成 ?[(1,3,5),(2,4,6)]? 這樣的形式。

?

四、?enumerate? 函數:遍歷帶索引

?

在遍歷可迭代對象時,有時需要同時獲取元素的索引和元素本身。?enumerate? 函數就可以在遍歷過程中,為每個元素配上其索引,返回一個枚舉對象(迭代器 )。

?

場景示例:遍歷列表并獲取索引

?

對于列表 ?fruits = ["apple", "banana", "orange"]?,要打印出“索引:元素”的形式,常規做法:

?

fruits = ["apple", "banana", "orange"]

index = 0

for fruit in fruits:

? ? print(f"{index}: {fruit}")

? ? index += 1

?

?

用 ?enumerate? 函數:

?

fruits = ["apple", "banana", "orange"]

for index, fruit in enumerate(fruits):

? ? print(f"{index}: {fruit}")

?

?

?enumerate? 自動處理了索引的遞增,代碼更簡潔,也避免了手動管理索引變量可能出現的錯誤,讓遍歷帶索引的場景變得輕松。

?

五、?collections.defaultdict?:便捷處理字典默認值

?

在使用普通字典 ?dict? 時,如果訪問不存在的鍵,會拋出 ?KeyError? 異常。而 ?collections? 模塊里的 ?defaultdict? ,可以指定一個默認工廠函數,當訪問不存在的鍵時,會自動用默認工廠函數生成對應的值。

?

場景示例:統計列表中各元素出現次數(常規字典對比 )

?

常規字典統計列表 ?words = ["apple", "banana", "apple"]? 中單詞出現次數:

?

words = ["apple", "banana", "apple"]

count_dict = {}

for word in words:

? ? if word in count_dict:

? ? ? ? count_dict[word] += 1

? ? else:

? ? ? ? count_dict[word] = 1

print(count_dict)??

?

?

用 ?defaultdict?:

?

from collections import defaultdict

words = ["apple", "banana", "apple"]

count_dict = defaultdict(int) # int 作為默認工廠函數,調用 int() 得到 0

for word in words:

? ? count_dict[word] += 1

print(dict(count_dict))??

?

?

?defaultdict? 幫我們省去了判斷鍵是否存在的步驟,直接對鍵進行操作即可,在處理一些需要默認值的字典場景時,讓代碼簡潔又高效。

?

六、?functools.lru_cache?:緩存優化遞歸或重復計算

?

對于一些遞歸函數或者會重復計算相同參數結果的函數,?functools? 模塊里的 ?lru_cache? 裝飾器可以緩存函數的調用結果,當再次以相同參數調用函數時,直接返回緩存的結果,避免重復計算,提升效率,同時也能讓代碼更簡潔(無需手動實現緩存邏輯 )。

?

場景示例:計算斐波那契數列(遞歸優化 )

?

常規遞歸計算斐波那契數列(存在大量重復計算 ):

?

def fibonacci(n):

? ? if n <= 1:

? ? ? ? return n

? ? return fibonacci(n - 1) + fibonacci(n - 2)

# 計算 fibonacci(30) 時會有很多重復計算

print(fibonacci(30))??

?

?

用 ?lru_cache? 裝飾器優化:

?

from functools import lru_cache

?

@lru_cache(maxsize=None) # maxsize=None 表示緩存無限大

def fibonacci(n):

? ? if n <= 1:

? ? ? ? return n

? ? return fibonacci(n - 1) + fibonacci(n - 2)

?

print(fibonacci(30))??

?

?

加上 ?lru_cache? 后,函數自動緩存了計算結果,后續相同參數調用直接取緩存,大大提升了遞歸效率,代碼上也只是添加一個裝飾器,簡潔又實用。

?

七、這些 Python 函數(包括內置函數和部分庫函數 ),從數據處理的批量操作、篩選、聚合,到遍歷優化、字典便捷處理,再到函數計算優化,覆蓋了多種常見編程場景。合理運用它們,能讓代碼擺脫繁瑣的循環、條件判斷等冗余結構,變得更加簡潔優雅,同時也能提升代碼的執行效率和可讀性。當然,Python 中還有很多其他好用的函數和特性,大家在日常編程中可以不斷探索挖掘,讓自己的代碼越來越“Pythonic” ,寫出更優質的程序。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909500.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

簡說ping、telnet、netcat

簡說 ping 和 telnet 命令的作用、用法和區別&#xff0c;方便理解它們在網絡診斷中的用途。 &#x1f310; ping 命令 ? 作用&#xff1a; ping 用于檢測網絡連通性。它通過向目標主機發送 ICMP Echo 請求 并等待回應&#xff0c;從而判斷目標主機是否可達&#xff0c;并測…

基于STM32的超聲波模擬雷達設計

一、雷達概述 雷達&#xff08;Radio Detection and Ranging&#xff0c;無線電探測與測距&#xff09;是一種利用電磁波探測目標位置、速度等信息的主動式傳感器系統。其基本原理是發射電磁波并接收目標反射的回波&#xff0c;通過分析回波的時間差、頻率變化等參數&#xff0…

飛書多維表格利用 Amazon Bedrock AI 能力賦能業務

背景 飛書多維表格是一款功能強大的在線數據管理與協作工具。它打破傳統表格局限&#xff0c;將電子表格與數據庫特性融合&#xff0c;支持看板、甘特圖、表單等多種視圖自由切換&#xff0c;可根據項目進度、任務管理等不同場景靈活展示數據。其豐富的字段類型能精準適配各類…

表格對比工具推薦,快速比對Excel文件

軟件介紹 今天為大家推薦一款專為Excel用戶設計的表格比較工具&#xff0c;簡單易用&#xff0c;零基礎也能快速掌握。 輕量高效的辦公助手 Excel比較工具體積僅為11MB&#xff0c;占用空間小&#xff0c;運行流暢&#xff0c;適合各類電腦配置使用。 簡潔明了的操作界面 軟…

深入探究其內存開銷與JVM布局——Java Record

Java 14引入的Record類型如同一股清流&#xff0c;旨在簡化不可變數據載體的定義。它的核心承諾是&#xff1a;??透明的數據建模??和??簡潔的語法??。自動生成的equals(), hashCode(), toString()以及構造器極大地提升了開發效率。 當我們看到這樣的代碼&#xff1a; …

Vue 3 九宮格抽獎系統,采用優雅的 UI 設計和流暢的動畫效果

九宮格抽獎 預覽地址 項目簡介 這是一個基于 Vue 3 開發的現代化九宮格抽獎系統&#xff0c;采用優雅的 UI 設計和流暢的動畫效果&#xff0c;為用戶提供極致的抽獎體驗。系統支持多種獎品配置&#xff0c;實時抽獎記錄展示&#xff0c;以及完整的活動說明功能。 核心功能 …

無縫對接大疆算力平臺:基于Coovally的無人機AI模型端到端優化方案

【導讀】 隨著無人機應用場景的快速拓展&#xff0c;企業對于定制化AI解決方案的需求日益迫切。大疆算力開放平臺為開發者提供了專業的模型量化與部署環境&#xff0c;幫助開發者將訓練好的AI模型高效部署至大疆無人機平臺。 然而&#xff0c;要實現完整的AI開發閉環&#xf…

ubuntu下載CUDA cuDNN

nivida-smi查看顯卡驅動版本 &#xff08;一&#xff09;安裝CUDA cuda官網 cuda官網 下載對應版本的cuda 這個官網真不錯啊&#xff0c;下面附上了指令 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv c…

FreeRTOS定時器

目錄 1.特性2.運行環境2.1 守護任務2.2 回調函數2.3 內部源碼 3.和Linux對比4.ID5.數據傳輸6.操作函數6.1 創建6.2 刪除6.3 啟動6.4 停止6.5 復位&#xff08;重置&#xff09;6.6 修改周期6.7 注意事項 7.示例&#xff1a;一般使用8.示例&#xff1a;定時器防抖 1.特性 定時器…

JavaScript中的迭代器模式:優雅遍歷數據的“設計之道”

JavaScript中的迭代器模式&#xff1a;優雅遍歷數據的“設計之道” 一、什么是迭代器模式&#xff1f; 在編程世界中&#xff0c;迭代器模式&#xff08;Iterator Pattern&#xff09;是一種經典的設計模式&#xff0c;它的核心思想是&#xff1a;為集合對象提供一種統一的訪…

Debian/Ubuntu systemd coredump調試程序Crash

程序是通過systemd監管&#xff0c;當程序出現crash的時候&#xff0c;需要保存crash的日志&#xff0c;也就是coredump日志&#xff0c;按照一般做法設置coredump。而在安裝有systemd服務的系統中一般都有systemd-coredump服務。 systemd-coredump 是 systemd 子系統中的一個工…

【圖片轉 3D 模型】北大·字節跳動·CMU攜手——單圖15 秒生成結構化3D模型!

??引言&#xff1a;單圖生成結構化 3 D 模型的技術突破? ? PartCrafter 由北京大學、字節跳動與卡耐基梅隆大學聯合研發&#xff0c;是全球首個??端到端生成結構化 3 D 網格??的模型。它僅需單張 RGB 圖像&#xff0c;即可在 34 秒內生成帶語義分解的 3 D 部件&#xf…

零基礎RT-thread第二節:按鍵控制

我這里依然使用的是野火開發板&#xff0c;F767芯片。 這一節寫一下按鍵控制LED亮滅。 這是按鍵以及LED的原理圖。 按鍵對應的引腳不按下時是低電平&#xff0c;按下后是高電平。 LED是在低電平點亮。 接下來是key.c: /** Copyright (c) 2006-2021, RT-Thread Development T…

《Gulp與SCSS:解構前端樣式開發的底層邏輯與實戰智慧》

探尋Gulp與SCSS協作的底層邏輯 Gulp&#xff0c;作為任務自動化的佼佼者&#xff0c;其核心價值在于將一系列復雜的任務&#xff0c;如文件的編譯、合并、壓縮等&#xff0c;以一種流暢且高效的方式串聯起來&#xff0c;形成一個自動化的工作流。它基于流&#xff08;stream&a…

OpenCV CUDA模塊圖像變形------對圖像進行GPU加速的透視變換函數warpPerspective()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于對圖像進行 GPU 加速的透視變換&#xff08;Perspective Transformation&#xff09;&#xff0c;是 cv::warpPerspective 的 CUDA 版…

吳恩達機器學習筆記(2)—單變量線性回歸

目錄 一、模型表示 二、代價函數 三、代價函數的直觀理解&#xff08;1&#xff09; 四、代價函數的直觀理解&#xff08;2&#xff09; 五、梯度下降 六、梯度下降的直觀理解 七、線性回歸的梯度下降 在本篇內容中&#xff0c;我們將介紹第一個機器學習算法——線性回歸…

最新華為 HCIP-Datacom(H12-821)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;&#xff0c;完整題庫請上方訪問&#xff0c;更新完畢。 在OSPF網絡中&#xff0c;NSSA區域與STUB區域都是為了減少LSA數量&#xff0c;兩者最主要的區別在于&#xff0c;NSSA區域可以引入外部路由&#xff0c;并同時接收OSPF…

vba學習系列(11)--批退率通過率等數據分析

系列文章目錄 文章目錄 系列文章目錄前言一、外觀報表1.產能2.固定傷排查3.鏡片不良TOP4.鏡片公式計算5.鏡片良率計算6.鏡片批退率7.鏡筒不良TOP8.鏡筒公式計算9.鏡筒良率計算10.鏡筒批退率 二、反射率報表1.機臺通過率2.鏡片通過率圈數分析3.鏡片通過率罩次分析4.鏡筒通過率圈…

成功在 Conda Python 2.7 環境中安裝 Clipper(eCLIP peak caller)

&#x1f52c; 成功在 Conda Python 2.7 環境中安裝 Clipper&#xff08;eCLIP peak caller&#xff09; 本文記錄了如何在無 root 權限下使用 Conda 環境&#xff0c;解決依賴、構建擴展模塊并成功安裝運行 clipper 的詳細流程。適用于再現 eCLIP 分析流程時遇到 clipper 安裝…

通過 VS Code 連接 GitLab 并上傳項目

通過 VS Code 連接 GitLab 并上傳項目&#xff0c;請按照以下步驟操作&#xff1a; 1. 安裝必要工具 確保已安裝 Git 并配置用戶名和郵箱&#xff1a; git config --global user.name "你的用戶名" git config --global user.email "你的郵箱" 在 VS Cod…