python中的高階函數

来源:https://www.cnblogs.com/qc2012/archive/2022/11/26/16928632.html
-Advertisement-
Play Games

1.匿名函數 # 1.匿名函數lambda # 簡化代碼 減少占用的記憶體 print('1.匿名函數lambda') def func(): print(10) func() func = lambda: print(10) # 出現警告的原因是: # 因為你把lambda表達式賦給了另一個變數。 ...


1.匿名函數

# 1.匿名函數lambda
# 簡化代碼 減少占用的記憶體
print('1.匿名函數lambda')


def func():
    print(10)


func()

func = lambda: print(10)
# 出現警告的原因是:
# 因為你把lambda表達式賦給了另一個變數。
# 但lambda表達式本就是一個匿名的函數,
# PEP8規範並不推薦將lambda表達式賦值給一個變數,
# 再通過變數調用函數這種方式。
# 這種方式不能體現lambda表達式的特色,
# 基本只是複製def的功能,
# 同時這個變數名其實也不是lambda表達式真正的函數名,
# 還顯得比def方式更容易混淆。
# 事實上lambda表達式的正確用法應該是在不分配變數的情況下使用


# lambda 形參: print(10)
# 有一個返回值,並且只有一句代碼
# 參數部分可有可無
def func0(a, b):
    return a+b


print(func0(1, 2))

func00 = lambda a, b: a + b
print(func00(1, 2))


# 排序

list1 = [[3, '1'], [1, '3'], [2, '2']]
# for i in list1:
#     print(i[0])  # 輸出前面的數字
list1.sort(key=lambda i: i[0])  # 根據list1每個元素中的第一個元素從小到大排序
print(list1)

list1 = [[3, '1'], [1, '3'], [2, '2']]
# for i in list1:
#     print(i[1])  # 輸出後面的字元串
list1.sort(key=lambda i: i[1])  # 根據list1每個元素中的第二個元素從小到大排序
print(list1)

list1 = [[3, '1:3'], [1, '3:2'], [2, '2:1']]
# for i in list1:
#     print(i[1][-1])  # 輸出字元串的最後一個字元
list1.sort(key=lambda i: i[1][-1])  # 根據list1每個元素中的第二個元素的-1索引位置的數據從小到大排序
print(list1)

 

 

2.高階函數map

# 2.高階函數map(func,list)
# 映射出一個新的數據
print()
print('2. map()')
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
map(lambda i: str(i), list1)  # 將list1中的每個數據轉換成str類型
# print(map(lambda i: str(i), list1))  # 列印出的是迭代器,而不是期望輸出的數據
# for i in list1:
#     print(str(i))
print(list(map(lambda i: str(i), list1)))

# for i in list1:
#     print(i+1)
list2 = list(map(lambda i: i + 1, list1))  # list1中的每個數據+1
print(list2)

 

 

3.高階函數reduce()

# 3.高階函數reduce(func,list)
# 累計
# 需要導入模塊
from functools import reduce  # 只導入了這一個函數

print()
print('3. reduce()')
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(reduce(lambda a, b: a + b, list1))  # 求和 和sum()作用相同
print(reduce(lambda a, b: a * b, list1))  # 求積

 

 

 4.高階函數filter

# 4.高階函數filter(func,list)  篩選
# 過濾函數
# 過濾不符合的表達式
# 過濾走不符合條件的數據,保留合乎條件的數據
print()
print('4. filter()')
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# for i in range:
#     if i%2 !=0:
print(list(filter(lambda i: i % 2 == 0, list1)))  # 選出偶數

 

 

5.遞歸

# 5.遞歸  套娃
# 遞歸特點:
# 1,函數內部自己調用自己
# 2,必須要有介面
print()
print('5.遞歸')


def func1(data):
    if data == 1:
        return 1
    return data + func1(data - 1)


print(func1(3))  # 3+2+1
print()
# 將列表中的每個數據輸出 def func2(list0): if type(list0) == list: # 判斷是否是列表 for i in list0: func2(i) else: print(list0) list1 = [1, 2, [3, [4, 5], [6, 7, 8]], [9, 0]] func2(list1)

 

 

# 今日作業
"""
用遞歸求5的階乘(5*4*3*2*1)
"""
print()
print('今日作業')


def func3(data: int) -> int:
    """
    階乘函數
    :param data:
    :return:
    """
    if data == 1:  # 判斷輸入的數據是否為1
        return 1
    return data * func3(data - 1)


print(func3(5))

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 引言 前段時間自己實現了ansible對接操作系統升級腳本,現將整個項目記錄如下,如果項目中存在問題或優化的點,請幫忙指正。本項目運行在RedHat Linux系統。 在我們生產環境中,操作系統的升級由系統升級、伺服器重啟以及vmtools安裝三部分組成。本次項目的目標有兩點: (1) ansi ...
  • 摘要:近日,經過全球知名獨立認證機構SGS Brightsight實驗室的安全評估,華為雲GaussDB企業級分散式資料庫內核獲得全球權威信息技術安全性評估標準CC EAL4+級別認證 本文分享自華為雲社區《國內唯一!GaussDB拿下的安全認證CC EAL4+究竟有多難?》,作者:GaussDB ...
  • # HTTPS server server { listen 443; server_name ************.com; ssl on; ssl_certificate cert/************.com.pem; ssl_certificate_key cert/******** ...
  • 一、數據類型存儲 在JavaScript中存在兩大數據類型:基本類型、引用類型。 基本數據類型存放在棧中,是一段簡單的數據段,數據大小確定,記憶體空間大小可以分配,是直接按值存放的,可以按值訪問。 引用數據類型存放在堆中,變數在棧中保存的是指向堆記憶體的地址值,這個地址值指向對應的對象類型,訪問堆記憶體中 ...
  • 摘要:在競爭如此激烈的當下,作為一名IT新人,怎麼才能讓HR眼前一亮,從萬千簡歷中脫穎而出成為最亮的那個崽呢? 本文分享自華為雲社區《【一行代碼秒上雲】連夜自建網站背刺我的求職對手們 !》,作者:AppCloud小助手。 前言 在競爭如此激烈的當下,作為一名IT新人,怎麼才能讓HR眼前一亮,從萬千簡 ...
  • Apache-Commons-* 字元串 判斷字元串是否為空白字元串 以前判斷字元串是否為空: if ((name == null) || (name.isEmpty())){} 使用 apache-common-lang3 的 StringUtils: void testIsBlank() { / ...
  • 伺服器端渲染技術02 11.EL表達式 11.1EL表達式介紹 EL表達式全稱:Expression Language,是表達式語言 EL表達式主要是代替jsp頁面的表達式腳本 EL表達式輸出數據時,比jsp的表達式腳本簡潔 EL表達式基本語法:${key} 底層其實走的還是jsp表達式腳本,可以理 ...
  • Lambda 表達式(Lambda Expression),相信大家對 Lambda 肯定是很熟悉的,畢竟我們數學上經常用到它,即 λ 。不過,感覺數學中的 Lambda 和編程語言中的 Lambda 表達式沒啥關係,要說有關係就是都有 Lambda 這個詞,噢!當然還有一個關係就是 Lambda ... ...
一周排行
    -Advertisement-
    Play Games
  • 就像 Web Api 介面可以對入參進行驗證,避免用戶傳入非法的或者不符合我們預期的參數一樣,選項也可以對配置源的內容進行驗證,避免配置中的值與選項類中的屬性不對應或者不滿足預期,畢竟大部分配置都是通過字元串的方式,驗證是很有必要的。 1. 註解驗證 像入參驗證一樣,選項驗證也可以通過特性註解方便地 ...
  • 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/17270107.html 加工的泛型類如下: using System; using System.Collections.Generic; using System.IO; using Syst ...
  • 在前一篇文章,我們瞭解瞭如何通過.NET6+Quartz開發基於控制台應用程式的定時任務,今天繼續在之前的基礎上,進一步講解基於ASP.NET Core MVC+Quartz實現定時任務的可視化管理頁面,僅供學習分享使用,如有不足之處,還請指正。 涉及知識點 Quartz組件,關於Quartz組件的 ...
  • 面向對象1 面向對象,更在乎的結果,而過程的實現並不重要 IDea快捷鍵(基礎版) | 快捷鍵 | 作用 | | | | | ctrl + / | 快捷註釋 | | ctrl + shift + / | 多行註釋 | | ctrl + d | 快速複製 | | ctrl + shift + up/d ...
  • NX中的checkmate功能是用於檢查模型、圖紙數據的工具,在UGOPEN中有例子。手動操作可以檢查已載入的裝配下所有零部件,可以設置通過後保存模型,檢查結果保存到Teamcenter中,預設保存在零組件版本下。 代碼中可以設置多個檢查規則。相關設置可以在用戶預設設置中進行設置。 1 // 2 / ...
  • JavaSE 運算符 算術運算符:+,-,*,/,%,++(自增),--(自減) i++:先用後+1;++i:先+1後用 賦值運算符:= 擴展賦值運算符:+=,-=,*=,/= a+=b >a=a+b: ​ 可讀性差,但是編譯效率高,且會自動進行類型轉換; ​ 當ab為基本數據類型時,a+b和b+a ...
  • 面向對象2 訪問修飾符 | | private | default | protected | public | | | | | | | | 當前類 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_che ...
  • 推薦一些學習qml教程 Qt官方的QML教程: https://doc.qt.io/qt-5/qtqml-index.html 這是一個由Qt官方提供的完整的QML教程,包含了所有基本知識和高級語法。 QML中文網:http://www.qmlcn.com/ 這是一個非常不錯的中文QML學習網站,提 ...
  • QAbstractBUtton: 所有按鈕控制項的基類 提供按鈕的通用功能 繼承自QWidget 屬於抽象類別,不能直接去使用,必須藉助於子類(除非你覺得子類不夠用,想自定義一個按鈕) 大部分功能之前已經使用過,在這裡只作簡單介紹 文本設置: setText(str) :設置按鈕提示文本 text() ...
  • 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。本篇介紹 VLD 配置文件中配置項 StartDisabled 的使用方法。 ...