日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

早知如此!來看看 Python 函數的七個秘密

來源: 責編: 時間:2024-04-29 16:12:40 233觀看
導讀Python 函數的七個重要知識點:類型提示以增加代碼可讀性;*args和**kwargs、Lambda函數和高階函數提供代碼靈活性;裝飾器讓我們無需修改原函數即可改變其行為;生成器函數實現惰性評估;最后,魔術方法在Python類中定義了特殊行

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

Y2J28資訊網——每日最新資訊28at.com

(1)類型提示

下面的代碼在工作中隨處可見!Y2J28資訊網——每日最新資訊28at.com

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

我們可以輕易地編寫如上的函數,因為 Python 是動態類型的——也就是說,變量數據類型是在運行時確定的。Y2J28資訊網——每日最新資訊28at.com

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

不過,也可以編寫如上與先前完全相同,但帶有類型提示的函數:Y2J28資訊網——每日最新資訊28at.com

  • a應為整數
  • b也應為整數
  • 函數的返回值應該是一個整數

當代碼庫變的更大時,類型提示在保持代碼盡可能地具有可讀性方面變得越來越重要。想想看,有 10,000 個函數,你需要推斷它們所接受的數據類型以及它們的返回類型,那就太“好玩”了。Y2J28資訊網——每日最新資訊28at.com

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

ls是整數列表,x應該是浮點數,函數應返回浮點數列表。Y2J28資訊網——每日最新資訊28at.com

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

a應為字符串,b應為布爾值,c應為字典,其中鍵為字符串,值為字符串。返回值應為一個字典,其鍵為字符串,但值為整數。Y2J28資訊網——每日最新資訊28at.com

請注意:類型提示只是提示,并不強制執行。如果我們沒有遵循類型提示給出的類型,Python 仍會允許這個操作。Y2J28資訊網——每日最新資訊28at.com

(2)*args 和 **kwargs

在真實的開發中,會有大量的*args 和**kwargs參數:Y2J28資訊網——每日最新資訊28at.com

  • args* 允許函數接受無限數量的位置參數。
  • kwargs 允許函數接受無限數量的關鍵字參數。

所有的位置參數都會被捕獲為元組參數,所有的關鍵字參數都會被捕獲為字典參數。Y2J28資訊網——每日最新資訊28at.com

magic(1, 2, 'apple', a=4, b=5, c=[1, 2, 3])
  • 1、2 和 'apple'是位置參數。
  • a=4、b=5 和 c=[1,2,3]是關鍵字參數。
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]}
  • 所有位置參數都被捕獲為元組參數。
  • 所有關鍵字參數都被捕獲為字典參數。

(3)Lambda 函數

Lambda 函數是一種小型匿名函數。例如:Y2J28資訊網——每日最新資訊28at.com

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

可以將它重寫為 lambda 函數:Y2J28資訊網——每日最新資訊28at.com

add = lambda x, y: x + y

函數的輸入在":"之前,返回值在":"之后:Y2J28資訊網——每日最新資訊28at.com

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

Lambda 函數可以是匿名的,并且在需要將一個函數作為另一個函數的參數時,Lambda 函數可能非常有用:Y2J28資訊網——每日最新資訊28at.com

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

(4)高階函數

高階函數可以接受另一個函數作為參數,或者返回另一個函數,或者同時滿足這兩個條件。比如以下的 apply 函數:Y2J28資訊網——每日最新資訊28at.com

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

在上述示例中,apply函數就是一個高階函數,因為它接受了另一個函數即func作為參數。Y2J28資訊網——每日最新資訊28at.com

能熟練運用高階函數,會讓你的代碼更為靈活強大。Y2J28資訊網——每日最新資訊28at.com

(5)裝飾器

裝飾器是能夠接受并返回函數的特殊高階函數,它的目標是在不改變原函數源代碼的情況下改變函數的行為。Y2J28資訊網——每日最新資訊28at.com

注意:裝飾器函數既接受函數又返回函數。Y2J28資訊網——每日最新資訊28at.com

# 這是 decorator 函數def add_exclamation(func):    def wrapper(name):        return func(name) + '!'    return wrapper# 這是被裝飾的函數def hello(name):    return 'hello ' + name# 實際的裝飾動作在此進行hello = add_exclamation(hello)# 現在,我們的函數的行為略有變化print(hello('tom'))  # hello tom!

我們可以用@add_exclamation替代hello=add_exclamation(hello),因為實際上它們做的事情是完全一樣的。Y2J28資訊網——每日最新資訊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!

裝飾器可以用于日志記錄、計時、處理異常、驗證身份、REST API等任務,是一個非常有用的工具!Y2J28資訊網——每日最新資訊28at.com

(6)生成器函數

你是否曾遇到過這樣的類似于<generator object x at 0x1029b4a90>的信息?當我們使用生成器函數時,就會出現這種情況。Y2J28資訊網——每日最新資訊28at.com

當我們使用yield時,函數就變成了生成器函數。yield和return關鍵字類似,都是從函數中輸出一個值,但與return不同的是,yield并不會停止整個函數。Y2J28資訊網——每日最新資訊28at.com

# 常規函數def test():    return [1, 2, 3]x = test()print(x)  # [1, 2, 3]
# 生成器函數,但我們仍然稱之為標準函數def test():    yield 1    yield 2    yield 3x = test()print(x)  # <generator object x at 0x1029b4a90>
# 生成器函數,但我們使用循環調用它def test():    yield 1    yield 2    yield 3for i in test():    print(i, end=' ')# 1 2 3

生成器執行了惰性評估——也就是說,它只在絕對必要的情況下起作用(例如,當我們使用循環時)。這使代碼在某些方面更為高效。Y2J28資訊網——每日最新資訊28at.com

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

這些在企業 Python 代碼中也隨處可見,特別是在涉及到面向對象編程時。魔術方法以兩個下劃線字符開始和結束,例如__init__,__str__,__getitem__,__add__等等。它們在 Python 類中定義了特殊行為。Y2J28資訊網——每日最新資訊28at.com

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

了解更多的魔術方法可以讓你的類更靈活,滿足更多場景的需求。Y2J28資訊網——每日最新資訊28at.com

總結

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

希望這篇文章對你有所幫助,讓你能更好地理解 python 函數。Y2J28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-86503-0.html早知如此!來看看 Python 函數的七個秘密

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 聊一聊Python isinstance內置函數

下一篇: LLM上下文窗口突破200萬!無需架構變化+復雜微調,輕松擴展8倍

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久成人免费电影| 亚洲日本成人女熟在线观看| 国产精品美女主播| 欧美性大战久久久久久久蜜臀| 欧美电影在线观看完整版| 欧美区二区三区| 国产精品久久夜| 黄色精品免费| 亚洲免费激情| 亚洲视频欧美视频| 久久久99国产精品免费| 欧美精品乱码久久久久久按摩| 国产精品videossex久久发布| 欧美肥婆bbw| 欧美午夜电影在线观看| 国产一本一道久久香蕉| 亚洲国内欧美| 在线免费精品视频| 亚洲最新中文字幕| 久久精品女人| 欧美精品日日鲁夜夜添| 国产色爱av资源综合区| 亚洲九九爱视频| 欧美一区不卡| 欧美日韩国产精品| 激情久久影院| 亚洲伊人色欲综合网| 亚洲在线中文字幕| 亚洲一区在线播放| 久久久久久网站| 欧美午夜视频在线| 亚洲二区在线视频| 午夜一级在线看亚洲| 欧美精品一区二区高清在线观看| 国产日韩欧美在线观看| aa级大片欧美三级| 亚洲私拍自拍| 美女视频黄免费的久久| 国产伦精品一区二区三区免费 | 国产精品v欧美精品v日韩精品| 狠狠综合久久av一区二区小说| 亚洲视频www| 欧美承认网站| 韩日精品中文字幕| 亚洲欧美国产毛片在线| 欧美精品在线免费| 欧美性猛交xxxx乱大交退制版| 欧美日韩一区二区欧美激情| 黄色小说综合网站| 午夜在线视频观看日韩17c| 欧美日韩亚洲综合一区| 国产欧美一区二区精品性色| 亚洲精品一区二区三区婷婷月 | 国产目拍亚洲精品99久久精品 | 免费成人av在线| 欧美精品日韩一本| 永久免费精品影视网站| 午夜视频一区在线观看| 欧美午夜片在线免费观看| 亚洲精品资源美女情侣酒店| 久久人人97超碰人人澡爱香蕉| 欧美激情视频一区二区三区不卡| 国产日韩欧美精品一区| 亚洲一区二区黄| 鲁大师影院一区二区三区| 国产伪娘ts一区| 亚洲综合视频在线| 国产精品a久久久久| 中文av字幕一区| 欧美日韩一级大片网址| 亚洲伦理中文字幕| 欧美国产日韩一区二区| 亚洲国产成人av在线 | 国产精品一区二区久久精品| 国外视频精品毛片| 99re热精品| 欧美精品一区二区三区很污很色的 | 久久精品欧美日韩| 国产日韩欧美视频在线| 午夜欧美精品| 欧美不卡视频| 亚洲成人在线观看视频| 久久先锋资源| 国产精品久久久久免费a∨| 日韩一级片网址| 欧美日韩高清免费| 一本久道久久综合中文字幕| 欧美日韩午夜视频在线观看| 一区二区欧美视频| 国产精品久久久久久久久久尿| 中国成人亚色综合网站| 国产精品久久久久毛片大屁完整版| 亚洲综合国产| 国产亚洲福利社区一区| 久久人人九九| 亚洲国产一二三| 欧美日韩aaaaa| 亚洲午夜高清视频| 国产视频欧美| 久久综合九色综合欧美就去吻| 亚洲第一黄色| 欧美资源在线观看| 国内成+人亚洲| 牛牛精品成人免费视频| 99re国产精品| 国产精品女同互慰在线看| 午夜视频一区| 亚洲风情亚aⅴ在线发布| 欧美黄在线观看| 一区二区三欧美| 国产人成精品一区二区三| 久久中文在线| 日韩亚洲欧美高清| 国产精品性做久久久久久| aa亚洲婷婷| 国产精品区一区二区三区| 久久成人久久爱| 亚洲黄一区二区三区| 欧美日韩在线视频一区二区| 午夜影院日韩| 亚洲国产另类久久久精品极度| 欧美日韩精品在线视频| 香蕉乱码成人久久天堂爱免费| 精品69视频一区二区三区| 欧美美女视频| 久久成人羞羞网站| 亚洲精品免费在线观看| 国产精品实拍| 男人的天堂亚洲在线| 亚洲第一精品夜夜躁人人爽| 欧美久色视频| 久久成人18免费网站| 亚洲人成毛片在线播放| 国产精品日韩二区| 美女国内精品自产拍在线播放| 宅男在线国产精品| 一区在线观看视频| 欧美午夜精品久久久久久久| 久久久另类综合| 在线观看精品一区| 欧美日一区二区三区在线观看国产免 | 国产精品久久久久7777婷婷| 久久久久久9| 亚洲神马久久| 红桃视频亚洲| 欧美性猛交xxxx乱大交退制版 | 久久国产精品久久久| 日韩视频免费观看高清完整版| 国产日本欧美一区二区三区在线 | 欧美视频在线播放| 可以免费看不卡的av网站| 中国成人在线视频| 亚洲大胆人体在线| 国产欧美日韩精品丝袜高跟鞋 | 欧美中文字幕精品| 日韩一级大片| 在线播放日韩专区| 国产精品网红福利| 欧美日韩精品一区二区三区四区 | 国产九区一区在线| 欧美激情亚洲视频| 久久久久久夜| 亚洲欧美日韩精品| 日韩小视频在线观看专区| 在线观看成人av电影| 国产精品羞羞答答| 欧美色欧美亚洲高清在线视频| 麻豆精品在线观看| 欧美中文字幕在线观看| 亚洲男女毛片无遮挡| 日韩视频不卡中文| 亚洲狠狠婷婷| 伊人色综合久久天天| 欧美日韩成人在线视频| 亚洲精品在线观看免费| 精品成人乱色一区二区| 国产伦精品一区二区三区免费| 欧美日韩一二三四五区| 欧美精品一线| 欧美成人精品激情在线观看| 久久蜜桃精品| 久久精品夜色噜噜亚洲a∨| 午夜在线视频观看日韩17c| 亚洲一区二区三区四区五区午夜| 亚洲美女av网站| 亚洲日本va午夜在线影院| 国产精品无码永久免费888| 欧美精品一区二区三| 欧美成人免费在线观看| 亚洲欧美综合另类中字| 亚洲网友自拍| 一区二区免费在线视频| 亚洲精品九九| 91久久香蕉国产日韩欧美9色| 在线观看欧美日韩国产| 激情六月综合| 激情一区二区三区| 黄色国产精品| 一区二区三区在线观看国产| 韩日视频一区| 在线观看欧美黄色| 亚洲国产精品专区久久| 亚洲国产精品福利| 亚洲国产精品一区二区www|