Python函數進階:四大高階函數、匿名函數、枚舉、拉鏈與遞歸詳解

在這里插入圖片描述

系列文章目錄

  1. Python數據類型:編程新手的必修課
  2. 深入探索Python字符串:技巧、方法與實戰
  3. Python 函數基礎詳解
  4. Python正則表達式詳解:掌握文本匹配的魔法
  5. Python文件操作寶典:一步步教你玩轉文件讀寫
  6. Python面向對象基礎與魔法方法詳解
  7. Python面向對象進階:深入解析面向對象三要素——封裝、繼承與多態
  8. Python進階之旅:深入理解變量作用域、垃圾回收、拷貝機制與異常處理
  9. Python函數進階:四大高階函數、匿名函數、枚舉、拉鏈與遞歸詳解
  10. 從零開始學迭代器生成器:打造高效、易讀的Python代碼
  11. Python進階:深入剖析閉包與裝飾器的應用與技巧

文章目錄

  • 系列文章目錄
  • 前言
  • 一、匿名函數
  • 二、四大高階函數
    • 1.概念
    • 2.map
    • 3.reduce
    • 4.filter
    • 5.sorted
    • 6.總結
  • 三、枚舉函數
  • 四、拉鏈函數
  • 五、遞歸函數
    • 簡單案例
    • 二分查找算法


前言

Python函數進階涵蓋四大高階函數(map、reduce、filter、sorted)、匿名函數、枚舉、拉鏈及遞歸。本博客將深入解析這些高級特性,助你提升代碼效率與可讀性。從序列處理到遞歸算法,一同探索Python函數的進階奧秘。


一、匿名函數

語法

def 函數名(形參):代碼塊
函數名(實參)# 變量-->函數對象
變量 = lambda 形參:表達式
變量名(實參)

分類

# f = lambda 形參:表達式# 1.無參數無返回值的函數
def func1():print("這是無參數無返回值的def函數")
func1()f1 = lambda :print("這是無參數無返回值的lambda函數")
f1()# 2.有參數無返回值的函數
def func2(a):print(f"這是有參數無返回值的def函數,參數為:{a}")
func2(10)f2 = lambda a,b:print(f"這是有參數無返回值的lambda函數,參數為:{a+b}")
f2(20,30)# 3.無參數有返回值的函數
def func3():return "這是無參數有返回值的def函數"
print(func3())f3 = lambda :"這是無參數有返回值的lambda函數"
print(f3())# 4.有參數有返回值的函數
def func4(a):return f"這是有參數有返回值的def函數。參數為:{a}"
print(func4(5))f4 = lambda a:f"這是有參數有返回值的lambda函數。參數為:{a}"
print(f4(3))

二、四大高階函數

1.概念

高階函數:將另外一個函數作為參數使用
作為參數的函數一定要有返回值

2.map

代碼如下(示例):

# map
# 語法:map(函數,可迭代對象)
# 作用:將函數依次作用于可迭代對象中的每一個數據;返回的結果是一個迭代器對象# 案例一:將所有的數據取平方值存放在一個新的列表中返回
list1 = [1,2,3,4,5]def func1(x):return x**2ret = map(func1,list1)
print(list(ret))

3.reduce


# reduce高階函數比較特殊,使用需要導包
from functools import reduce# reduce
# 語法:reduce(函數,可迭代對象)
# 作用:對可迭代對象中的數據進行累計操作
# 		返回一個值
# 案例一:利用高階函數實現對可迭代對象中的數據進行求和
list1 = [11,12,13,14,15]def func1(a,b):return a+bret = reduce(func1,list1)
print(ret)# 第一次:a=11   b=12    23
# 第二次:a=23   b=13    36
# 第三次:a=36   b=14    50
# 第四次:a=50   b=15    65

4.filter

# filter
# 語法:filter(函數,可迭代對象)
# 作用:通過函數對可迭代對象中的數據依次進行過濾,保留滿足條件的數據;返回的結果是一個迭代器對象# 案例一:100-999之間的水仙花數
list1 = [i for i in range(100,1000)]def func1(x):return int(str(x)[0]) ** 3 + int(str(x)[1]) ** 3 + int(str(x)[2]) ** 3 == xret = filter(func1,list1)
print(list(ret))

5.sorted


# abs()
# 語法:abs(數字)
# 作用:獲取當前數字的絕對值
num = -10
print(abs(num))   # 10# sort()
# 語法:列表.sort(key排序規則,reverse降序)
# 作用:按照指定的排序規則對列表中的數據進行升降序排序;不指定任何參數時,列表升序排序;指定reverse=True實現降序排序
list1 = [78,60,-34,51,0,-14]
def func1(x):return abs(x)
list1.sort(reverse=True,key=func1)
print(list1)# sorted
# 語法:sorted(可迭代對象,key排序規則,reverse降序)
# 作用:將可迭代對象按照指定的排序規則進行升降序排序
list1 = [78,60,-34,51,0,-14]
def func1(x):return abs(x)
ret = sorted(list1,reverse=True,key=func1)
print(ret)

6.總結


map1.所有的數據都要   2.對所有的數據都進行相同的操作  3.返回的結果是一個迭代器對象
reduce1.對數據進行累積操作(累加,累乘)  2.返回的結果是一個具體的值  3.使用需要導包
filter1. 不是所有的數都要,僅保留滿足條件的數據  2.返回的結果時一個迭代器對象
sorted:排序

三、枚舉函數

# 枚舉函數
# enumerate()
# 語法:enumerate(可迭代對象,start)
# 作用:獲取可迭代對象中的數據及對應的序號;序號默認從0開始,充當下標;通過start參數執行序號的起始值list1 = ["hello","你好","瑪卡巴卡"]ret1 = enumerate(list1,start=100)for i,j in ret1:print(i)

四、拉鏈函數

# 拉鏈函數
# zip
# 語法:zip()
# 作用:從多個可迭代對象中按照順序取對應的數據,組合成一個個小元組;返回的結果是一個zip對象list1 = ["張三","李四","王五","趙六"]
list2 = ["喜羊羊","美羊羊","懶羊羊"]ret = zip(list1,list2)for i in ret:print(i)

五、遞歸函數

簡單案例

# 遞歸函數
# 本質:自己調用自己# 編寫遞歸函數
# 1.在定義和調用函數時傳遞起始值
# 2.大范圍的判斷(何時結束遞歸)
# 3.實現本質:自己調用自己(參數發生變化)# 案例一:用遞歸函數實現1到10的和
def func1(n):if n == 10:return 10return n+func1(n+1)
print(func1(1))# 案例二:用遞歸函數實現10到1的和
def func2(n):if n == 1:return 1return n+func2(n-1)
print(func2(10))# 案例三:用遞歸函數實現10以內偶數的和
def func3(x):if x == 10:return 10else:return x + func3(x+2)
print(func3(0))
-------------------------------------
def func3(n):if n <= 0:return 0if n % 2 == 0:return n + func3(n-1)else:return func3(n-1)print(func3(10))

二分查找算法

# 遞歸函數實現二分查找算法
# 1.在定義和調用函數時傳遞起始值
# 2.大范圍判斷(結束遞歸)
# 3.實現自己調用自己(參數發生變化)# 遞歸實現獲取指定數據的下標
# 列表數據:1.數量沒有要求   2.數字的大小   3.數據必須有規律的排放
list1 = [5,13,26,45,63,79,81,96,102,304,706,958,1200]
# lst:指定要從這個列表中查詢數據-->列表不會發生變化
# n:要查詢的數據-->數據不會發生變化
# start:查詢范圍的起始值的下標
# end:查詢范圍的結束值的下標
def func(lst,n,start,end):# 查詢范圍內有數據:結束下標大于等于開始下標if end >= start:# 查詢中間值下標   mid = (start + end ) / 2mid = (start + end) // 2# 將要查詢的數據于中間值進行比較# 要查詢的數據 = 中間值if n == lst[mid]:return f"要查詢的數據的下標為:{mid}"# 要查詢的數據 > 中間值    start為mid+1elif n > lst[mid]:return func(lst,n,mid+1,end)# 要查詢的數據 < 中間值    end為mid-1elif n < lst[mid]:return func(lst,n,start,mid-1)# 如果查詢范圍內沒有數據了,需要結束遞歸else:return "當前列表中沒有要查詢的數據"
print(func(list1,6300,0,len(list1)-1))

在這里插入圖片描述

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

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

相關文章

databricks~Unity Catalog

Unity Catalog hierarchy 包含了用戶授權管理信息和元數據信息 workspace with unity catalog hierarchy unity metastore Ref: https://www.youtube.com/playlist?listPLY-V_O-O7h4fwcHcXgkR_zTLvddvE_GfC

[力扣題解] 494. 目標和

題目&#xff1a;494. 目標和 思路 01背包 轉換為01背包問題 難點在于看出可以用背包問題解決本題&#xff1b; 題目字面意思是劃分出一堆再減去另一堆&#xff0c;得到的結果想要等于target&#xff0c;設定一堆為正&#xff0c;記為left&#xff0c;另一堆為負&#xff0…

ChatGPT類大模型應用入門了解與使用

一 前言 ChatGPT大眾熱情逐漸褪去&#xff0c;但在后臺技術人的探索還處于熱火朝天狀態。如果我們生活的世界是一杯清水&#xff0c; 那類似ChatGPT的語言大模型技術的橫空出世就如滴入水杯的一滴墨汁&#xff0c;第一滴很顯眼&#xff0c;但實際上是后續墨汁慢慢擴散滲透才是…

Windows11下使用Qt5.14.2編譯QtXlsx驅動詳細步驟

原有&#xff1a;由于系統需要將QTableWidget表格中的數據導出、在Windows下最開始使用Excel.Application組件實現了導出功能&#xff0c;后面將代碼轉換到Ubuntu20.04下進行編譯&#xff0c;發現項目.pro文件中的QT axcontainer和代碼.h文件中的#include <QAxObject>跟…

基于圖鳥UI的資訊名片模版開發與應用

一、引言 在前端技術日新月異的今天&#xff0c;快速、高效、美觀的UI組件庫和模板成為了開發者們關注的焦點。圖鳥UI作為一款集成了基礎布局元素、配色體系、圖標icon和精選組件的UI框架&#xff0c;為前端開發者提供了極大的便利。本文將以圖鳥UI為基礎&#xff0c;探討基于…

接口測試工具有哪些,哪些比較火

接口測試工具可以幫助開發人員和測試人員更高效地進行接口測試&#xff0c;以下是一些常用的接口測試工具&#xff1a; 1. **Postman** Postman 是一款廣受歡迎的接口測試工具&#xff0c;它提供了豐富的功能和直觀的用戶界面&#xff0c;幫助開發人員和測試人員輕松進行 API…

如何讓外網訪問內網服務?

隨著互聯網的快速發展&#xff0c;越來越多的企業和個人需要將內網服務暴露給外網用戶訪問。由于安全和隱私等因素的考慮&#xff0c;直接將內網服務暴露在外網是非常不安全的做法。如何讓外網用戶安全訪問內網服務成為了一個重要的問題。 在這個問題上&#xff0c;天聯公司提供…

golang rune類型解析,與byte,string對比,以及應用

Golang中的rune類型是一個32位的整數類型(int32)&#xff0c;它是用來表示Unicode碼點的。rune類型的值可以是任何合法的Unicode碼點&#xff0c;它通常用來處理字符串中的單個字符。 在Golang中&#xff0c;字符常量使用單引號來表示&#xff0c;例如 a。使用單引號表示的字符…

rust - 使用 cargo-nextest 替代 cargo test

cargo-nextest 是新一代的rust測試程序&#xff0c;能夠極大提升測試性能&#xff0c;可以完全替代 cargo test 命令。 1. 安裝 cargo install cargo-nextest2. 執行測試 project ├── Cargo.toml ├── LICENSE ├── README.md ├── build.rs ├── core_utils │ …

K-means聚類模型

目錄 1.定義 2.K-means聚類模型的優點 3.K-means聚類模型的缺點 4.K-means聚類模型的應用場景 5.對K-means聚類模型未來的展望 6.小結 1.定義 什么是 K-means 聚類模型&#xff1f;K-means 聚類模型是一種無監督學習算法&#xff0c;用于將數據劃分為不同的組或簇&#…

Lumines推出RGBL彩色混合LED

Luminus Devices傾心打造了一款嶄新的4合1 RGBL&#xff08;紅綠藍綠石灰&#xff09;LED系列&#xff0c;專為舞臺與建筑照明領域量身打造&#xff0c;滿足對高顯色指數&#xff08;CRI&#xff09;與高輸出顏色混合的苛刻需求。這一創新之舉&#xff0c;無疑是照明技術的一次…

使用HiBurn燒錄鴻蒙.bin文件到Hi3861開發板

鴻蒙官方文檔的“Hi3861開發板第一個示例程序”中描述了——如何使用DevEco Device Tool工具燒錄二進制文件到Hi3861開發板&#xff1b; 本文將介紹如何使用HiBurn工具燒錄鴻蒙的.bin文件到Hi3861開發板。 獲取HiBurn工具 通過鴻蒙官方文檔我們知道DevEco Device Tool是一個V…

SAP--ABAP踩坑日志---日期函數的踩坑-----FIMA_DATE_CREATE

當你需要動態生成日期列的時候,出現了奇怪的BUG怎么辦? 用函數循環循環產生獲取下一個日期,結果出現了5.30 直接到6.1了 …我的5.31呢??? 解決方案:用這個,不要瞎用函數啊! day_col day_col 1.

Mybatis 與 MybatisPlus 打印sql日志配置

Mybatis 與 MybatisPlus 打印sql日志配置 方法一&#xff1a; Mybatis 配置&#xff1a; mybatis:configuration: ### 開啟打印sql配置log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ### 開啟駝峰配置 map-underscore-to-camel-case&#xff1a;trueMyb…

docker所在磁盤空間不足 遷移數據

1.查看原始目錄docker info | grep "Docker Root Dir" 一般在/var/lib/docker 2.停止docker service docekr stop 3.移動數據 注意 移動前不要創建docker目錄&#xff01; mv /var/lib/docker /home/docker 4.進入目錄查看是否與原始目錄相同&#xff0c;確認一…

LeetCode 題解:112. 路徑總和,遞歸,JavaScript,詳細注釋

原題鏈接&#xff1a; 112. 路徑總和 解題思路&#xff1a; 如果求根節點到葉子節點的路徑上的節點值之和&#xff0c;假設共有3個節點&#xff0c;那么寫成計算式是val1 val2 val3 sum那么將計算式轉換就可以得到val3 sum - val1 - val2也就是說&#xff0c;問題可以從…

表現層框架設計之表現層設計模式_2.MVP模式

1.MVP模式 MVP&#xff08;Model-View-Presenter&#xff09;模式提供數據&#xff0c;View負責顯示&#xff0c;Controller/Presenter負責邏輯的處理。MVP是從經典的模式MVC演變而來&#xff0c;它們的基本思想有相通的地方&#xff1a;Controller/Presenter負責邏輯的處理&am…

16、設計模式之迭代器模式

迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是 Java 和 .Net 編程環境中非常常用的設計模式。這種模式用于順序訪問集合對象的元素&#xff0c;不需要知道集合對象的底層表示。 迭代器模式屬于行為型模式。 介紹 意圖&#xff1a; 提供一種方法順序訪問…

rtemis 包:多種機器學習算法集成!兼顧數據處理與可視化美圖

rtemis 是一個集機器學習與可視化于一體的 R 包&#xff0c;用于各種高級機器學習研究和應用。整體而言&#xff0c;該軟件有三個目標&#xff1a; 「應用數據科學」&#xff1a;使高級數據分析高效且易于使用 「機器學習研究」&#xff1a;提供一個平臺以開發和測試新穎的機器…

Linux 查詢開機時間

在Linux系統中&#xff0c;有幾種方法可以查詢系統的開機時間。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 方法一&#xff1a;使用 uptime 命令 uptime 命令顯示系統的運行時間以及其他信息。 [nukixuso6 ~]# uptime輸出示例&#xff1a; 15:29:…