自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文帶您掌握十個(gè)強(qiáng)大的Python內(nèi)置函數(shù)

開發(fā) 前端
將代碼編譯為字節(jié)碼,快速而簡(jiǎn)潔。Python中的compile()函數(shù)將源代碼編譯為可以稍后執(zhí)行的代碼對(duì)象。它允許你將一段Python代碼字符串轉(zhuǎn)換為代碼對(duì)象,然后可以將其傳遞給exec()或eval()進(jìn)行執(zhí)行。

我們經(jīng)常有這樣的經(jīng)歷:花了很長(zhǎng)時(shí)間編寫和調(diào)試一個(gè)特定功能的函數(shù),卻發(fā)現(xiàn)Python已經(jīng)有類似的內(nèi)置函數(shù)。我們常常在重復(fù)造輪子。Python包含了許多強(qiáng)大的內(nèi)置函數(shù),使用這些函數(shù)來(lái)簡(jiǎn)化代碼可以為我們節(jié)省寶貴的時(shí)間。

接下來(lái),我們將介紹一些我們經(jīng)常忽略的強(qiáng)大Python內(nèi)置函數(shù)。

ZIP_Longest

合并不同大小的可迭代對(duì)象。Python中的zip_longest()函數(shù)來(lái)自itertools模塊,允許你將多個(gè)長(zhǎng)度不同的可迭代對(duì)象進(jìn)行合并。與zip()不同,后者會(huì)在最短的可迭代對(duì)象處停止,zip_longest()會(huì)一直合并,直到最長(zhǎng)的可迭代對(duì)象耗盡,缺失的值會(huì)用指定的fillvalue填充(默認(rèn)為None)。

  • 處理不等長(zhǎng)的可迭代對(duì)象:在處理長(zhǎng)度不同的可迭代對(duì)象時(shí)非常有用,確保由于尺寸不均而沒(méi)有數(shù)據(jù)丟失。
  • 允許自定義填充:fillvalue參數(shù)允許你指定如何處理缺失值,這為合并來(lái)自多個(gè)來(lái)源的數(shù)據(jù)提供了靈活性。

zip_longest()函數(shù)可以用于:

  • 合并來(lái)自多個(gè)來(lái)源的數(shù)據(jù),尤其是長(zhǎng)度不均勻的數(shù)據(jù)。
  • 比較沒(méi)有直接關(guān)聯(lián)的數(shù)據(jù)點(diǎn)。
  • 處理不等維度的矩陣或網(wǎng)格。
from itertools import zip_longest


list1 = [1, 2, 3]
list2 = ['a', 'b']
list3 = ['X', 'Y', 'Z', 'W']


result = list(zip_longest(list1, list2, list3))
print(result) 


result = list(zip_longest(list1, list2, list3, fillvalue='-'))
print(result)

圖片圖片

Divmod

divmod(a, b)函數(shù)返回一個(gè)包含商和余數(shù)的元組,當(dāng)將a除以b時(shí)。它是a // b(商)和a % b(余數(shù))的組合形式。

這個(gè)函數(shù)在需要同時(shí)得到商和余數(shù)的情況下非常實(shí)用。它通過(guò)一步操作代替了兩個(gè)獨(dú)立的操作(整數(shù)除法和取模),從而減少了開銷。

divmod()在以下場(chǎng)景中非常有用:

  • 當(dāng)你需要將秒轉(zhuǎn)換為分鐘和秒,小時(shí)轉(zhuǎn)換為分鐘和小時(shí)等時(shí),divmod()可以快速計(jì)算這兩個(gè)值。
  • 計(jì)算貨幣分解,例如將總金額分解為較大的面額和較小的零錢。
a = 20
b = 6


result = divmod(a, b)
print(result)  


quotient, remainder = result
print(f"Quotient: {quotient}, Remainder: {remainder}")

圖片圖片

Compile

將代碼編譯為字節(jié)碼,快速而簡(jiǎn)潔。Python中的compile()函數(shù)將源代碼編譯為可以稍后執(zhí)行的代碼對(duì)象。它允許你將一段Python代碼字符串轉(zhuǎn)換為代碼對(duì)象,然后可以將其傳遞給exec()或eval()進(jìn)行執(zhí)行。

圖片圖片

compile()函數(shù)允許你動(dòng)態(tài)執(zhí)行存儲(chǔ)在字符串中的Python代碼,這在一些高級(jí)用例中非常有用,例如模板引擎、REPL系統(tǒng)或動(dòng)態(tài)生成代碼時(shí)。

code_string = '3 * 4 + 5'
compiled_code = compile(code_string, '<string>', 'eval')
print(compiled_code)
result = eval(compiled_code)
print(result)

圖片圖片

Bytearray

創(chuàng)建和修改字節(jié)序列。bytearray()函數(shù)創(chuàng)建一個(gè)可變的字節(jié)序列,它是字節(jié)數(shù)據(jù)的靈活表示形式。與不可變的bytes不同,bytearray允許修改,適用于需要操作或更新字節(jié)數(shù)據(jù)的場(chǎng)景。

圖片圖片

bytearray允許修改,適用于需要?jiǎng)討B(tài)構(gòu)建或更改字節(jié)數(shù)據(jù)的場(chǎng)景。在處理文件、網(wǎng)絡(luò)協(xié)議或流中的二進(jìn)制數(shù)據(jù)時(shí),它非常有用,尤其是在需要頻繁修改的情況下。

data = bytearray("Hello, World!", "utf-8")
print(data) 
data[7:12] = b'Python'
print(data)

圖片圖片

Repr

查看對(duì)象背后的代碼。Python中的repr()函數(shù)返回對(duì)象的字符串表示形式,理想情況下可以使用eval()函數(shù)重新創(chuàng)建該對(duì)象。它提供對(duì)象的正式字符串表示,適用于調(diào)試和日志記錄。

圖片圖片

number = 42
string = "Hello, World!"
list_obj = [1, 2, 3]


print(repr(number))
print(repr(string))
print(repr(list_obj))

圖片圖片

Memoryview

輕松實(shí)現(xiàn)直接內(nèi)存訪問(wèn)。Python中的memoryview()函數(shù)創(chuàng)建一個(gè)內(nèi)存視圖對(duì)象,允許你訪問(wèn)支持緩沖區(qū)協(xié)議的對(duì)象的內(nèi)部數(shù)據(jù),而無(wú)需復(fù)制數(shù)據(jù)。這在高效處理大數(shù)據(jù)集時(shí)特別有用,因?yàn)樗试S對(duì)數(shù)據(jù)的切片進(jìn)行操作。

圖片圖片

memoryview()通過(guò)允許直接訪問(wèn)對(duì)象的底層內(nèi)存,避免了復(fù)制數(shù)據(jù)的開銷。在科學(xué)計(jì)算或數(shù)據(jù)分析中,處理大型數(shù)組或緩沖區(qū)非常常見,memoryview()可以通過(guò)減少內(nèi)存使用大大提升性能。

data = bytearray(b"Hello, World!")


mv = memoryview(data)


print(mv[0:5].tobytes())

圖片圖片

Property

集成getter、setter和deleter于一體。property()函數(shù)是一個(gè)內(nèi)置函數(shù),它創(chuàng)建并返回一個(gè)屬性對(duì)象,這是一種特殊的屬性類型,允許對(duì)對(duì)象屬性進(jìn)行管理式訪問(wèn)。屬性支持為屬性定義getter、setter和deleter方法,促進(jìn)了封裝和數(shù)據(jù)隱藏。

圖片圖片

  • 封裝:允許控制屬性的訪問(wèn)和修改方式,支持驗(yàn)證和日志記錄。
  • 惰性計(jì)算:支持屬性的惰性計(jì)算,只有在訪問(wèn)時(shí)才計(jì)算其值。

當(dāng)你希望對(duì)屬性的修改施加規(guī)則時(shí),property()非常有用。

class Circle:
    def __init__(self, radius):
        self._radius = radius


    @property
    def radius(self):
        """The radius property."""
        return self._radius


    @radius.setter
    def radius(self, value):
        if value < 0:
            raise ValueError("Radius cannot be negative")
        self._radius = value


    @property
    def area(self):
        """The area property."""
        return 3.14159 * (self._radius ** 2)


circle = Circle(5)
print(circle.radius)  


circle.radius = 10
print(circle.area)  


try:
    circle.radius = -5 
except ValueError as e:
    print(e)

圖片圖片

Frozensets

用于高效操作的不可變集合。frozenset()函數(shù)返回一個(gè)不可變的集合對(duì)象,意味著一旦創(chuàng)建,其元素?zé)o法被更改(添加或刪除)。這允許創(chuàng)建可用于字典鍵或存儲(chǔ)在其他集合中的集合。

以下是一些使用此函數(shù)的場(chǎng)景:

  • 當(dāng)你需要一個(gè)在其生命周期內(nèi)不應(yīng)更改的集合時(shí)。
  • 作為字典中的鍵,以確保項(xiàng)目的唯一性。
  • 由于frozenset是不可變的,它們可以用作字典的鍵。
my_frozenset = frozenset([1, 2, 3, 4, 5])
print(my_frozenset) 


my_frozenset.add(6)

圖片圖片

Callable

callable()是Python中的一個(gè)內(nèi)置函數(shù),用于檢查一個(gè)對(duì)象是否可調(diào)用。callable()通過(guò)在調(diào)用之前驗(yàn)證對(duì)象是否可調(diào)用,防止運(yùn)行時(shí)錯(cuò)誤。當(dāng)處理可能在運(yùn)行時(shí)被調(diào)用的對(duì)象時(shí),特別是在復(fù)雜的應(yīng)用中,函數(shù)、lambda表達(dá)式或?qū)ο罂赡軙?huì)被傳遞和互換使用,callable()非常有用。

這個(gè)內(nèi)置函數(shù)適用于以下情況——當(dāng)函數(shù)、lambda表達(dá)式或?qū)ο罂赡芑Q使用時(shí),callable()可以幫助驗(yàn)證它們是否可以被調(diào)用。

圖片圖片

還可以通過(guò)定義__call__()方法,使自定義類的實(shí)例變得可調(diào)用。

class Dog:
    def __call__(self, sound):
        return f"The dog says {sound}"


dog = Dog()


print(callable(dog)) 
print(dog("woof"))

圖片圖片

在這里,Dog類通過(guò)實(shí)現(xiàn)__call__()方法變得可調(diào)用。dog實(shí)例表現(xiàn)得像一個(gè)函數(shù),允許你直接向其傳遞參數(shù)。

dis

Python中的dis模塊提供了用于反匯編Python字節(jié)碼的函數(shù),這對(duì)于理解Python如何執(zhí)行代碼以及調(diào)試非常有用。這個(gè)模塊使開發(fā)者能夠查看Python執(zhí)行的低級(jí)操作。它還可以通過(guò)檢查字節(jié)碼來(lái)幫助識(shí)別性能瓶頸。

import dis


def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)


dis.dis(fibonacci)

將輸出fibonacci的字節(jié)碼指令,顯示Python執(zhí)行該函數(shù)時(shí)所執(zhí)行的操作。

圖片圖片

Python的內(nèi)置函數(shù)顯著提升了開發(fā)效率。常用函數(shù)包括:

  • zip_longest():合并不等長(zhǎng)的可迭代對(duì)象,避免數(shù)據(jù)丟失。
  • divmod():同時(shí)獲取商和余數(shù),簡(jiǎn)化計(jì)算。
  • compile():動(dòng)態(tài)執(zhí)行代碼。
  • bytearray():處理可變字節(jié)序列,適合頻繁修改的場(chǎng)景。
  • memoryview():提供高效的內(nèi)存訪問(wèn)。
  • property():支持?jǐn)?shù)據(jù)封裝與訪問(wèn)控制。
  • frozenset():創(chuàng)建不可變集合,適用于字典鍵。
  • callable():檢查對(duì)象是否可調(diào)用。
  • dis模塊:幫助理解字節(jié)碼,識(shí)別性能瓶頸。

合理利用這些函數(shù)可以提升代碼的簡(jiǎn)潔性和可讀性。

責(zé)任編輯:武曉燕 來(lái)源: 新語(yǔ)數(shù)據(jù)故事匯
相關(guān)推薦

2023-12-22 15:44:43

2024-01-24 13:14:00

Python內(nèi)置函數(shù)工具

2024-07-11 12:14:20

Pythonmapfilter

2021-09-15 09:20:37

Python函數(shù)代碼

2024-10-06 14:01:47

Python裝飾器對(duì)象編程

2024-10-08 10:44:32

2022-07-14 11:06:07

React開發(fā)Web

2024-03-12 17:54:55

容器類型Init

2025-04-30 10:36:17

2024-08-19 00:01:00

2024-07-18 15:08:27

2024-05-21 09:45:40

機(jī)器學(xué)習(xí)人工智能XAI

2023-05-14 22:55:00

插件IntelliJIDEA

2024-11-19 09:00:00

Pythondatetime模塊

2024-06-26 13:11:40

2024-05-28 14:36:00

Python庫(kù)開發(fā)

2022-12-20 07:39:46

2023-12-21 17:11:21

Containerd管理工具命令行

2022-10-21 17:24:34

契約測(cè)試定位

2024-08-08 11:31:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)