0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

6個(gè)堪稱神仙的內(nèi)置函數(shù)

科技綠洲 ? 來(lái)源:快學(xué)Python ? 作者:快學(xué)Python ? 2023-10-21 14:41 ? 次閱讀

之前給大家分享過(guò)3個(gè)節(jié)省時(shí)間的Python技巧,當(dāng)時(shí)就提出了,大家可以多使用Python的 內(nèi)置函數(shù) ,既能提高自己的Python程序速度,同時(shí)還能保持代碼簡(jiǎn)潔易懂。

今天,它們就來(lái)了,我們會(huì)一次性分享6個(gè)堪稱神仙的內(nèi)置函數(shù)。在很多計(jì)算機(jī)書籍中,它們也通常作為高階函數(shù)來(lái)介紹。而我自己在日常工作中,經(jīng)常使用它們來(lái)使代碼更快,更易于理解。

圖片

Lambda 函數(shù)

Lambda函數(shù)用于創(chuàng)建匿名函數(shù),即沒(méi)有名稱的函數(shù)。它只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)函數(shù)來(lái)執(zhí)行單個(gè)操作并且可以在一行中編寫時(shí),就可以用到匿名函數(shù)了。

lambda [arg1 [,arg2,.....argn]]:expression

lambda的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。例如:

lambda x: x+2

如果我們也想像def定義的函數(shù)隨時(shí)調(diào)用,可以將lambda函數(shù)分配給這樣的函數(shù)對(duì)象。

add2 = lambda x: x+2
add2(10)

輸出結(jié)果:

圖片

利用Lambda函數(shù),可以將代碼簡(jiǎn)化很多,具體再舉個(gè)例子。

圖片如上圖所示,結(jié)果列表newlist是使用lambda函數(shù)用一行代碼生成的。

Map 函數(shù)

map()函數(shù)會(huì)將一個(gè)函數(shù)映射到一個(gè)輸入列表的所有元素上。

map(function,iterable)

比如我們先創(chuàng)建了一個(gè)函數(shù)來(lái)返回一個(gè)大寫的輸入單詞,然后將此函數(shù)應(yīng)有到列表colors中的所有元素。

def makeupper(word):
    return word.upper()

colors=['red','yellow','green','black']
colors_uppercase=list(map(makeupper,colors))
colors_uppercase

輸出結(jié)果:

圖片

此外,我們還可以使用匿名函數(shù)lambda來(lái)配合map函數(shù),這樣可以更加精簡(jiǎn)。

colors=['red','yellow','green','black']
colors_uppercase=list(map(lambda x: x.upper(),colors))
colors_uppercase

如果我們不用Map函數(shù)的話,就需要使用for循環(huán)。

圖片如上圖所示,在實(shí)際使用中 Map函數(shù)會(huì)比f(wàn)or循環(huán)依次列表元素的方法快1.5倍 。

Reduce函數(shù)

當(dāng)需要對(duì)一個(gè)列表進(jìn)行一些計(jì)算并返回結(jié)果時(shí),reduce()是個(gè)非常有用的函數(shù)。舉個(gè)例子,當(dāng)需要計(jì)算一個(gè)整數(shù)列表所有元素的乘積時(shí),即可使用reduce函數(shù)實(shí)現(xiàn)。^[1]^

它與map函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個(gè)參數(shù),而map接收一個(gè)參數(shù)。

reduce(function, iterable[, initializer])

接下來(lái)我們用實(shí)例來(lái)演示reduce()的代碼執(zhí)行過(guò)程。

from functools import reduce
def add(x, y) :   # 兩數(shù)相加
    return x + y
numbers = [1,2,3,4,5]
sum1 = reduce(add, numbers)   # 計(jì)算列表和

得到結(jié)果sum1 = 15,其代碼執(zhí)行過(guò)程如下方動(dòng)圖所示。

圖片
▲代碼執(zhí)行過(guò)程動(dòng)圖

結(jié)合上圖我們會(huì)看到,reduce將一個(gè)相加函數(shù)add()作用在一個(gè)列表[1,2,3,4,5]上,映射函數(shù)接收了兩個(gè)參數(shù),reduce()把結(jié)果繼續(xù)和列表的下一個(gè)元素做累加計(jì)算 。

此外,我們同樣可以使用匿名函數(shù)lambda來(lái)配合reduce函數(shù),這樣可以更加精簡(jiǎn)。

from functools import reduce
numbers = [1,2,3,4,5]
sum2 = reduce(lambda x, y: x+y, numbers)

得到輸出sum2= 15,與之前結(jié)果保持一致。

需要注意:Python3.x開始reduce()已經(jīng)被移到functools模塊里 ^[2]^ ,如果我們要使用,需要用from functools import reduce導(dǎo)入.

enumerate 函數(shù)

enumerate()函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中。它的語(yǔ)法如下所示:

enumerate(iterable, start=0)

它的兩個(gè)參數(shù),一個(gè)是序列、迭代器或其他支持迭代對(duì)象;另一個(gè)是下標(biāo)起始位置,默認(rèn)情況從0開始,也可以自定義計(jì)數(shù)器的起始編號(hào)。

colors = ['red', 'yellow', 'green', 'black']
result = enumerate(colors)

如果我們有一個(gè)存放colors的顏色列表,運(yùn)行后就會(huì)得到一個(gè)enumerate(枚舉) 對(duì)象。它可以直接在for循環(huán)中使用,也可以轉(zhuǎn)換為列表,具體用法如下所示。

for count, element in result:
    print(f"迭代編號(hào):{count},對(duì)應(yīng)元素:{element}")

圖片

Zip 函數(shù)

zip()函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表 ^[3]^ 。

我們還是用兩個(gè)列表作為例子演示:

colors = ['red', 'yellow', 'green', 'black']
fruits = ['apple', 'pineapple', 'grapes', 'cherry']
for item in zip(colors,fruits):
    print(item)

輸出結(jié)果:

圖片

當(dāng)我們使用zip()函數(shù)時(shí),如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同。

prices =[100,50,120]
for item in zip(colors,fruits,prices):
    print(item)

圖片

Filter 函數(shù)

filter()函數(shù)用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回由符合條件元素組成的新列表,其語(yǔ)法如下所示 ^[4]^ 。

filter(function, iterable)

比如舉個(gè)例子,我們可以先創(chuàng)建一個(gè)函數(shù)來(lái)判斷數(shù)據(jù)是否為奇數(shù),然后使用filter()函數(shù)過(guò)濾出列表中的所有奇數(shù):

def is_odd(n):
    return n % 2 == 1

old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

new_list = filter(is_odd, old_list)
print(newlist)

輸出結(jié)果:

圖片


今天分享的這6個(gè)內(nèi)置函數(shù),在使用 Python 進(jìn)行數(shù)據(jù)分析或者其他復(fù)雜的自動(dòng)化任務(wù)時(shí)非常方便。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3761

    瀏覽量

    80754
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4284

    瀏覽量

    62325
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68236
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4768

    瀏覽量

    84376
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于Python巧妙而強(qiáng)大的內(nèi)置函數(shù)

    python內(nèi)置了一些非常巧妙而且強(qiáng)大的內(nèi)置函數(shù),對(duì)初學(xué)者來(lái)說(shuō),一般不怎么用到,我也是用了一段時(shí)間python之后才發(fā)現(xiàn),哇還有這么好的函數(shù),這個(gè)
    發(fā)表于 12-14 14:52 ?523次閱讀
    關(guān)于Python巧妙而強(qiáng)大的<b class='flag-5'>內(nèi)置</b><b class='flag-5'>函數(shù)</b>

    可調(diào)電源電路問(wèn)題,求各路神仙指教

    自學(xué)模電中遇到電源電路問(wèn)題,輸出正負(fù)3V到12V的可調(diào)電壓電源電路,為什么我畫的不能輸出3V到12V。輸出的正電壓在不停增長(zhǎng),輸出的負(fù)電壓穩(wěn)定在455uv。我猜可能是變壓器或者整流橋的問(wèn)題,但是我不知道怎么操作,求各路神仙指教。
    發(fā)表于 09-28 21:34

    內(nèi)置函數(shù)真的內(nèi)置到XC16編譯器嗎?

    內(nèi)置函數(shù)是否在“庫(kù)”中,或者它們真的“內(nèi)置”到XC16編譯器嗎?不可能從編譯器中分離出任何未使用的內(nèi)置代碼,就像圖書館那樣嗎?我在PIC33E中使用以下內(nèi)容:u
    發(fā)表于 05-07 11:26

    STM32f103zet6使用庫(kù)函數(shù)點(diǎn)亮一個(gè)LED

    STM32f103zet6使用庫(kù)函數(shù)點(diǎn)亮一個(gè)LED
    發(fā)表于 05-22 10:34 ?119次下載
    STM32f103zet<b class='flag-5'>6</b>使用庫(kù)<b class='flag-5'>函數(shù)</b>點(diǎn)亮一<b class='flag-5'>個(gè)</b>LED

    python的內(nèi)置函數(shù)詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是python的內(nèi)置函數(shù)詳細(xì)資料概述。
    發(fā)表于 11-18 08:00 ?0次下載

    python的常用函數(shù)有哪些

    map() 是 Python 內(nèi)置的高階函數(shù),它接收一個(gè)函數(shù) f 和一個(gè)list ,并通過(guò)把函數(shù)
    發(fā)表于 02-25 11:52 ?9次下載
    python的常用<b class='flag-5'>函數(shù)</b>有哪些

    python提供的68個(gè)內(nèi)置函數(shù)詳解

    ? 內(nèi)置函數(shù)就是Python給你提供的,拿來(lái)直接用的函數(shù),比如print.,input等。 截止到python版本3.6.2 ,python一共提供了68個(gè)
    的頭像 發(fā)表于 10-27 09:14 ?2154次閱讀

    進(jìn)階必備的68個(gè)Python 內(nèi)置函數(shù)分析

    來(lái)源: pypypypy 內(nèi)置函數(shù)就是Python給你提供的,拿來(lái)直接用的函數(shù),比如print.,input等。 截止到python版本3.6.2 ,python一共提供了68個(gè)
    的頭像 發(fā)表于 11-01 10:18 ?3989次閱讀

    msp430內(nèi)置函數(shù)總結(jié) __bic_SR_register(),__delay_cycles(x)

    msp430內(nèi)置函數(shù)總結(jié) __bic_SR_register(),__delay_cycles(x)
    發(fā)表于 11-25 09:51 ?0次下載
    msp430<b class='flag-5'>內(nèi)置</b><b class='flag-5'>函數(shù)</b>總結(jié) __bic_SR_register(),__delay_cycles(x)

    推薦一個(gè)Python超級(jí)好用的內(nèi)置函數(shù)lambda

    在Python當(dāng)中,我們經(jīng)常使用lambda關(guān)鍵字來(lái)聲明一個(gè)匿名函數(shù),所謂地匿名函數(shù),通俗地來(lái)講就是沒(méi)有名字的函數(shù)。
    的頭像 發(fā)表于 09-13 18:09 ?979次閱讀
    推薦一<b class='flag-5'>個(gè)</b>Python超級(jí)好用的<b class='flag-5'>內(nèi)置</b><b class='flag-5'>函數(shù)</b>lambda

    input( ) 輸入函數(shù)和注釋是什么

    定義:內(nèi)置函數(shù)是Python 自帶的的函數(shù),安裝Python 后可以直接使用。 語(yǔ)法:`函數(shù)名(參數(shù))`
    的頭像 發(fā)表于 02-23 15:27 ?1467次閱讀
    input( ) 輸入<b class='flag-5'>函數(shù)</b>和注釋是什么

    python常用的內(nèi)置函數(shù)和模塊

    python數(shù)字包含常用的內(nèi)置函數(shù)和模塊,比如pow()、abs()、floor()、int()等函數(shù),以及math、random等模塊。
    的頭像 發(fā)表于 03-10 10:10 ?896次閱讀

    python如何定義一個(gè)函數(shù)

    ()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。 二、定義一個(gè)函數(shù) 你可以定義一個(gè)由自己想要功能的
    的頭像 發(fā)表于 11-14 11:26 ?671次閱讀

    不屬于python的內(nèi)置函數(shù)

    Python是一種高級(jí)編程語(yǔ)言,它提供了許多內(nèi)置函數(shù),可以幫助開發(fā)人員更輕松地處理各種任務(wù)。但是,在Python中并非所有的函數(shù)都是內(nèi)置函數(shù)
    的頭像 發(fā)表于 11-29 14:27 ?1342次閱讀

    函數(shù)指針和指針函數(shù)是不是一個(gè)東西?

    函數(shù)指針的本質(zhì)是指針,就跟整型指針、字符指針一樣,函數(shù)指針指向的是一個(gè)函數(shù)。
    的頭像 發(fā)表于 01-03 16:35 ?490次閱讀
    <b class='flag-5'>函數(shù)</b>指針和指針<b class='flag-5'>函數(shù)</b>是不是一<b class='flag-5'>個(gè)</b>東西?