AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

早知如此!來(lái)看看 Python 函數(shù)的七個(gè)秘密

來(lái)源: 責(zé)編: 時(shí)間:2024-04-29 16:12:40 179觀看
導(dǎo)讀Python 函數(shù)的七個(gè)重要知識(shí)點(diǎn):類型提示以增加代碼可讀性;*args和**kwargs、Lambda函數(shù)和高階函數(shù)提供代碼靈活性;裝飾器讓我們無(wú)需修改原函數(shù)即可改變其行為;生成器函數(shù)實(shí)現(xiàn)惰性評(píng)估;最后,魔術(shù)方法在Python類中定義了特殊行

Python 函數(shù)的七個(gè)重要知識(shí)點(diǎn):類型提示以增加代碼可讀性;*args和**kwargs、Lambda函數(shù)和高階函數(shù)提供代碼靈活性;裝飾器讓我們無(wú)需修改原函數(shù)即可改變其行為;生成器函數(shù)實(shí)現(xiàn)惰性評(píng)估;最后,魔術(shù)方法在Python類中定義了特殊行為。這些知識(shí)點(diǎn)是每個(gè)Python開(kāi)發(fā)者的必備工具。VTv28資訊網(wǎng)——每日最新資訊28at.com

VTv28資訊網(wǎng)——每日最新資訊28at.com

(1)類型提示

下面的代碼在工作中隨處可見(jiàn)!VTv28資訊網(wǎng)——每日最新資訊28at.com

def magic(a, b):    return a + b

我們可以輕易地編寫(xiě)如上的函數(shù),因?yàn)?Python 是動(dòng)態(tài)類型的——也就是說(shuō),變量數(shù)據(jù)類型是在運(yùn)行時(shí)確定的。VTv28資訊網(wǎng)——每日最新資訊28at.com

def magic(a: int, b: int) -> int:    return a + b

不過(guò),也可以編寫(xiě)如上與先前完全相同,但帶有類型提示的函數(shù):VTv28資訊網(wǎng)——每日最新資訊28at.com

  • a應(yīng)為整數(shù)
  • b也應(yīng)為整數(shù)
  • 函數(shù)的返回值應(yīng)該是一個(gè)整數(shù)

當(dāng)代碼庫(kù)變的更大時(shí),類型提示在保持代碼盡可能地具有可讀性方面變得越來(lái)越重要。想想看,有 10,000 個(gè)函數(shù),你需要推斷它們所接受的數(shù)據(jù)類型以及它們的返回類型,那就太“好玩”了。VTv28資訊網(wǎng)——每日最新資訊28at.com

def test1(ls: list[int], x: float) -> list[float]:    pass

ls是整數(shù)列表,x應(yīng)該是浮點(diǎn)數(shù),函數(shù)應(yīng)返回浮點(diǎn)數(shù)列表。VTv28資訊網(wǎng)——每日最新資訊28at.com

def test2(a: str, b: bool, c: dict[str, str]) -> dict[str, int]:    pass

a應(yīng)為字符串,b應(yīng)為布爾值,c應(yīng)為字典,其中鍵為字符串,值為字符串。返回值應(yīng)為一個(gè)字典,其鍵為字符串,但值為整數(shù)。VTv28資訊網(wǎng)——每日最新資訊28at.com

請(qǐng)注意:類型提示只是提示,并不強(qiáng)制執(zhí)行。如果我們沒(méi)有遵循類型提示給出的類型,Python 仍會(huì)允許這個(gè)操作。VTv28資訊網(wǎng)——每日最新資訊28at.com

(2)*args 和 **kwargs

在真實(shí)的開(kāi)發(fā)中,會(huì)有大量的*args 和**kwargs參數(shù):VTv28資訊網(wǎng)——每日最新資訊28at.com

  • args* 允許函數(shù)接受無(wú)限數(shù)量的位置參數(shù)。
  • kwargs 允許函數(shù)接受無(wú)限數(shù)量的關(guān)鍵字參數(shù)。

所有的位置參數(shù)都會(huì)被捕獲為元組參數(shù),所有的關(guān)鍵字參數(shù)都會(huì)被捕獲為字典參數(shù)。VTv28資訊網(wǎng)——每日最新資訊28at.com

magic(1, 2, 'apple', a=4, b=5, c=[1, 2, 3])
  • 1、2 和 'apple'是位置參數(shù)。
  • a=4、b=5 和 c=[1,2,3]是關(guān)鍵字參數(shù)。
def magic(*args, **kwargs):    print('args =', args)    print('kwargs =', kwargs)magic(1, 2, 'apple', a=4, b=5, c=[1, 2, 3])# args = (1, 2, 'apple')# kwargs = {'a':4, 'b':5, 'c':[1, 2, 3]}
  • 所有位置參數(shù)都被捕獲為元組參數(shù)。
  • 所有關(guān)鍵字參數(shù)都被捕獲為字典參數(shù)。

(3)Lambda 函數(shù)

Lambda 函數(shù)是一種小型匿名函數(shù)。例如:VTv28資訊網(wǎng)——每日最新資訊28at.com

def add(x, y):    return x + y

可以將它重寫(xiě)為 lambda 函數(shù):VTv28資訊網(wǎng)——每日最新資訊28at.com

add = lambda x, y: x + y

函數(shù)的輸入在":"之前,返回值在":"之后:VTv28資訊網(wǎng)——每日最新資訊28at.com

# 另一個(gè)例子def add10(x):    return x + 10# 等同于add10 = lambda x: x + 10

Lambda 函數(shù)可以是匿名的,并且在需要將一個(gè)函數(shù)作為另一個(gè)函數(shù)的參數(shù)時(shí),Lambda 函數(shù)可能非常有用:VTv28資訊網(wǎng)——每日最新資訊28at.com

def apply(func, x):    return func(x)x = apply(lambda x: x + 10, 7)print(x)  # 17

(4)高階函數(shù)

高階函數(shù)可以接受另一個(gè)函數(shù)作為參數(shù),或者返回另一個(gè)函數(shù),或者同時(shí)滿足這兩個(gè)條件。比如以下的 apply 函數(shù):VTv28資訊網(wǎng)——每日最新資訊28at.com

def apply(func, x):    return func(x)x = apply(lambda x: x + 10, 7)print(x)  # 17

在上述示例中,apply函數(shù)就是一個(gè)高階函數(shù),因?yàn)樗邮芰肆硪粋€(gè)函數(shù)即func作為參數(shù)。VTv28資訊網(wǎng)——每日最新資訊28at.com

能熟練運(yùn)用高階函數(shù),會(huì)讓你的代碼更為靈活強(qiáng)大。VTv28資訊網(wǎng)——每日最新資訊28at.com

(5)裝飾器

裝飾器是能夠接受并返回函數(shù)的特殊高階函數(shù),它的目標(biāo)是在不改變?cè)瘮?shù)源代碼的情況下改變函數(shù)的行為。VTv28資訊網(wǎng)——每日最新資訊28at.com

注意:裝飾器函數(shù)既接受函數(shù)又返回函數(shù)。VTv28資訊網(wǎng)——每日最新資訊28at.com

# 這是 decorator 函數(shù)def add_exclamation(func):    def wrapper(name):        return func(name) + '!'    return wrapper# 這是被裝飾的函數(shù)def hello(name):    return 'hello ' + name# 實(shí)際的裝飾動(dòng)作在此進(jìn)行hello = add_exclamation(hello)# 現(xiàn)在,我們的函數(shù)的行為略有變化print(hello('tom'))  # hello tom!

我們可以用@add_exclamation替代hello=add_exclamation(hello),因?yàn)閷?shí)際上它們做的事情是完全一樣的。VTv28資訊網(wǎng)——每日最新資訊28at.com

def add_exclamation(func):    def wrapper(name):        return func(name) + '!'    return wrapper@add_exclamationdef hello(name):    return 'hello ' + nameprint(hello('tom'))  # hello tom!

裝飾器可以用于日志記錄、計(jì)時(shí)、處理異常、驗(yàn)證身份、REST API等任務(wù),是一個(gè)非常有用的工具!VTv28資訊網(wǎng)——每日最新資訊28at.com

(6)生成器函數(shù)

你是否曾遇到過(guò)這樣的類似于<generator object x at 0x1029b4a90>的信息?當(dāng)我們使用生成器函數(shù)時(shí),就會(huì)出現(xiàn)這種情況。VTv28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)我們使用yield時(shí),函數(shù)就變成了生成器函數(shù)。yield和return關(guān)鍵字類似,都是從函數(shù)中輸出一個(gè)值,但與return不同的是,yield并不會(huì)停止整個(gè)函數(shù)。VTv28資訊網(wǎng)——每日最新資訊28at.com

# 常規(guī)函數(shù)def test():    return [1, 2, 3]x = test()print(x)  # [1, 2, 3]
# 生成器函數(shù),但我們?nèi)匀环Q之為標(biāo)準(zhǔn)函數(shù)def test():    yield 1    yield 2    yield 3x = test()print(x)  # <generator object x at 0x1029b4a90>
# 生成器函數(shù),但我們使用循環(huán)調(diào)用它def test():    yield 1    yield 2    yield 3for i in test():    print(i, end=' ')# 1 2 3

生成器執(zhí)行了惰性評(píng)估——也就是說(shuō),它只在絕對(duì)必要的情況下起作用(例如,當(dāng)我們使用循環(huán)時(shí))。這使代碼在某些方面更為高效。VTv28資訊網(wǎng)——每日最新資訊28at.com

(7)特殊的魔法(Dunder)方法

這些在企業(yè) Python 代碼中也隨處可見(jiàn),特別是在涉及到面向?qū)ο缶幊虝r(shí)。魔術(shù)方法以兩個(gè)下劃線字符開(kāi)始和結(jié)束,例如__init__,__str__,__getitem__,__add__等等。它們?cè)?Python 類中定義了特殊行為。VTv28資訊網(wǎng)——每日最新資訊28at.com

class Dog:    # 定義如何為 dog 分配屬性    def __init__(self, name, age):        self.name = name        self.age = age    # 定義當(dāng)我們對(duì) dog 執(zhí)行 str() 時(shí)會(huì)返回什么    def __str__(self):        return 'Dog!'    # 定義當(dāng)我們執(zhí)行 dog + something 時(shí)會(huì)返回什么    def __add__(self, something):        return 'Dog ' + str(something)    # 定義當(dāng)我們執(zhí)行 dog[something] 時(shí)會(huì)返回什么    def __getitem__(self, something):        return 123

了解更多的魔術(shù)方法可以讓你的類更靈活,滿足更多場(chǎng)景的需求。VTv28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

本文概述了 Python 函數(shù)的七個(gè)重要知識(shí)點(diǎn):類型提示以增加代碼可讀性;*args和**kwargs、Lambda函數(shù)和高階函數(shù)提供代碼靈活性;裝飾器讓我們無(wú)需修改原函數(shù)即可改變其行為;生成器函數(shù)實(shí)現(xiàn)惰性評(píng)估;最后,魔術(shù)方法在Python類中定義了特殊行為。這些知識(shí)點(diǎn)是每個(gè)Python開(kāi)發(fā)者的必備工具。VTv28資訊網(wǎng)——每日最新資訊28at.com

希望這篇文章對(duì)你有所幫助,讓你能更好地理解 python 函數(shù)。VTv28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-86503-0.html早知如此!來(lái)看看 Python 函數(shù)的七個(gè)秘密

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 聊一聊Python isinstance內(nèi)置函數(shù)

下一篇: LLM上下文窗口突破200萬(wàn)!無(wú)需架構(gòu)變化+復(fù)雜微調(diào),輕松擴(kuò)展8倍

標(biāo)簽:
  • 熱門焦點(diǎn)
Top