91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中Lambda的錯誤有哪些

發布時間:2021-11-01 17:41:22 來源:億速云 閱讀:272 作者:小新 欄目:web開發

這篇文章主要介紹Python中Lambda的錯誤有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Lambda,也稱為lambda函數,是匿名函數,可以接受任意數量的參數,而只有一個表達式。 它們的聲明由lambda關鍵字表示。 基本語法如下。

lambda arguments: expression

Lambda最適合需要小的功能且僅使用一次的地方。 lambda的一種常見用法是將其設置為內置sorted()函數中的關鍵參數。 這是一個例子。

>>> students = [('Mike', 'M', 15), ('Mary', 'F', 14), ('David', 'M', 16)] >>> sorted(students, key=lambda x: x[2]) [('Mary', 'F', 14), ('Mike', 'M', 15), ('David', 'M', 16)] # The students are sorted by age

許多教程在解釋lambda是什么以及可以在哪里使用lambda方面做得很好,因此,沒有充分的理由在這里重復大量的講解。

相反,本文的目的是向您展示最常見的lambda誤用,以便在以下所列情況以外的其他情況下使用lambda時,您可能會正確使用它們。

1.重新發明輪子

lambdas的第一個誤用是忽略了現有的內置函數。

讓我們仍然以sorted()函數為例。 假設我們有一個字符串列表,我們想使用它們的長度對它們進行排序。

當然,lambda函數lambda x:len(x)可以工作,但是直接使用內置的len()函數怎么樣?

>>> pets = ['dog', 'turtle', 'bird', 'fish', 'kitty'] >>> sorted(pets, key=lambda x: len(x)) ['dog', 'bird', 'fish', 'kitty', 'turtle'] # The built-in len() function >>> sorted(pets, key=len) ['dog', 'bird', 'fish', 'kitty', 'turtle']

這是另一個涉及使用max()函數的示例。

>>> number_tuples = [(4, 5, 7), (3, 1, 2), (9, 4, 1)] >>> sorted(number_tuples, key=lambda x: max(x)) [(3, 1, 2), (4, 5, 7), (9, 4, 1)] # The built-in max() function >>> sorted(number_tuples, key=max) [(3, 1, 2), (4, 5, 7), (9, 4, 1)]

優秀實踐1:在編寫自己的Lambda之前先考慮一下內置函數。

2.將其分配給變量

在一些教程(包括我的一些教程)中,我已經看到了將lambdas分配給變量的方法,但是它主要是向初學者展示lambdas本質上是函數。

但是,某些初學者可能已將其作為一種好習慣,并認為lambda只是聲明短函數的便捷方式。 以下代碼片段向您展示了這種濫用。

>>> divide_two_numbers = lambda x, y: x / y >>> divide_two_numbers(4, 5) 0.8

為什么要避免這種情況? 如果您還記得上面提到的內容,那么lambda應該只使用一次,因此沒有理由將lambda分配給變量。

如果確實需要使用相關功能,則應使用def關鍵字來聲明一個常規函數,如下所示。

如果您認為使用此簡單功能的兩行代碼并不酷,我們可以將其重寫為一行:defdivid_two_numbers_fun(x,y):返回x /  y,其工作方式相同。

>>> def divide_two_numbers_fun(x,y):  ...     return x / y ...  >>> divide_two_numbers_fun(7, 8) 0.875

避免為變量分配lambda的主要原因是出于調試/維護的目的,尤其是在生產/團隊合作環境中。

讓我們看一個簡單的例子,可能發生的事情。 在實際情況下,事情可能會變得復雜得多。

>>> divide_two_numbers(3, 0) Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "<stdin>", line 1, in <lambda> ZeroDivisionError: division by zero >>> divide_two_numbers_fun(3, 0) Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "<stdin>", line 1, in divide_two_numbers_fun ZeroDivisionError: division by zero

如您在上面看到的,通過常規函數的聲明,我們確切地知道哪個函數導致了錯誤。 相比之下,使用lambda只能告訴我們存在一個lambda導致錯誤。

為什么沒有顯示功能名稱?

這是因為lambda是匿名函數,所有這些函數都具有相同的名稱-。 您能想象如果您的同事發現數十個存在錯誤會多么令人沮喪?

優秀實踐2:要多次使用常規函數而不是lambda。

3.高階函數使用不當

當我們說高階函數時,是指可以通過將函數作為參數或通過返回函數來對其他函數進行操作的函數。

與當前主題相關的函數是map(),filter()和reduce(),它們在lambda的許多教程中都已或多或少地被使用。  但是,這導致對lambda以及更高階函數的某種濫用。

出于演示目的,我將在本教程中僅使用map()函數,但相同的原理也適用于其他高階函數。

假設我們有一個整數列表,并且希望有一個包含它們的平方的列表。 下面將lambda與map()函數一起使用。

我們將獲得一個迭代器-map()函數中的map對象,然后將其轉換為列表,我們需要在此迭代器上調用list()函數。

>>> numbers = [1, 2, 3, 5, 8] >>> squares = list(map(lambda x: x * x, numbers)) >>> squares [1, 4, 9, 25, 64]

實際上,可以通過列表理解方便地實現相同的功能-不需要高階函數或lambda。 更加簡潔易讀,不是嗎?

當然,掌握列表理解能力是另一個" Pythonic功能"主題,需要另一個教程。

>>> numbers = [1, 2, 3, 5, 8] >>> squares = [x * x for x in numbers] >>> squares [1, 4, 9, 25, 64]

優秀實踐3:考慮使用帶列表推導的lambda替換高階函數。

4.表達式太笨拙

這比以前的方法少見。 但是一些程序員只是盡可能地使用lambda來努力編寫最多的Python代碼。 有時需要付出一定的代價-可讀性。

假設我們有一個字符串列表,我們需要使用一個奇怪的要求對它們進行排序:單詞中不同元音的數量。 在sorted()函數中使用lambda如下所示。

>>> texts = ['iiiii', 'bag', 'beto', 'blackboard', 'sequoia'] >>> sorted(texts, key=lambda x: len(set([l for l in list(x) if l in ['a','e','i','o','u']]))) ['iiiii', 'bag', 'beto', 'blackboard', 'sequoia']

它可以按預期工作,但絕對不是最易讀的代碼。 下面的代碼怎么樣?

>>> texts = ['iiiii', 'bag', 'beto', 'blackboard', 'sequoia'] >>> def number_distinct_vowels(x): ...     vowels = ['a', 'e', 'i', 'o', 'u'] ...     vowels_only = [l for l in list(x) if l in vowels] ...     distinct_vowels = set(all_vowels) ...     return len(distinct_vowels) ...  >>> sorted(texts, key=number_distinct_vowels) ['iiiii', 'bag', 'beto', 'blackboard', 'sequoia']

當然,我們需要再寫幾行代碼,但是新代碼難道不具有更好的可讀性嗎?

優秀實踐4:如果lambda的表達式過于繁瑣,則編寫一個正則函數。

以上是“Python中Lambda的錯誤有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枣阳市| 界首市| 张北县| 郧西县| 东山县| 龙游县| 武宣县| 正镶白旗| 浮山县| 大安市| 五原县| 伊吾县| 汝南县| 富川| 高州市| 广宗县| 丹阳市| 巴彦淖尔市| 石家庄市| 闽侯县| 青州市| 平邑县| 彰化市| 宜宾市| 东明县| 永年县| 宜春市| 岑溪市| 张掖市| 西昌市| 晴隆县| 班戈县| 赫章县| 江山市| 曲麻莱县| 五家渠市| 诸城市| 洪泽县| 洛浦县| 资源县| 昌江|