在本文中,我們將介紹Python 中for 循環和推導式的一些常見用法,如何分析現有循環,以及如何將它們轉換為Elixir 中的等效表達式,使用Enum 模組和 推導式.
中的函數我們將重點放在:
- 透過函數轉換資料集合 (map)
- 將值過濾到集合中或從集合中過濾出來(過濾器)
- 產生單一聚合值或結構,例如平均值(減少或摺疊)
我們將以一個結合了這三者的基本範例來結束!
Python
For 迴圈
在 Python 中,for 循環 通常具有交錯處理功能 - 這些步驟被組合在一起形成相同的子句或主體。下面是前兩個偶數的平方的範例:
這個交錯體的一個挑戰是:
- 辨識每個步驟,並且......
- 弄清楚它是什麼類型的步驟。
分解每個步驟可以讓您了解正在發生的轉換,消除任何不必要的轉換,並將這些步驟重寫為另一種語言構造或更高層級的函數。
註解上面的函數會得到:
步驟
結果 - 步驟順序是:
- 濾波「出」奇數/「入」偶數
- 將數字(例如2)對應到其對應的平方數(例如4)
- 減少為偶數平方和
推導式
Python 中的推導式 是映射 和過濾 集合(如列表和字典)的簡單方法。它們沒有提供減少結果的方法,但是我們可以使用諸如 sum 之類的內建函數來轉換上面的函數來處理理解的結果:
透過推導式,表達式將map 步驟(num ** 2) 和filter 步驟(如果num % 222 == 0) 清楚。 sum 是此處的 reduce 步驟。
在 Python 中瀏覽這些推導式很容易,而且它為推導式的複雜度設定了有用的上限。
有了這個背景,並且更了解 Python 處理構造的結構和限制,讓我們繼續使用 Elixir 的推導式和 Enum 管道來重寫上述 Python 程式碼!
映射:Enum.map 和生成器
我們要如何將步長寫成平方數?在 Elixir 中,這很簡單!
使用 Enum.map:
並使用推導式(for):
生成器 表達式,產生要在 for 表達式主體中使用的值,在 do:
之後過濾:Enum.filter和filters
使用 Enum.filter(或 Enum.reject)很容易做到:
我們希望在求平方之前過濾掉奇數,因此我們將其放置在管道中的正確位置 - 在 Enum.map 之前。
使用推導式,我們可以在推導式的頭部添加第二個表達式,一個過濾器,它是一個布林測試:
rem(n, 2) == 0 表達式會丟棄所有返回false(或nil)的元素,留下[2, 4] 作為實際傳遞到主體的數字(do: n ** 2)的理解。
減少-> Enum.reduce和reduce:
使用 Enum.reduce/2,我們可以透過加到累加器來將平方數列表轉換為其總和。如果我們沒有為累加器指定初始值 (Enum.reduce/3),第一個元素將用作累加器的初始值,這裡很方便:
透過推導式,我們比 Python 的同等功能更強大。我們可以透過在頭部增加另一個子句來新增一個歸約步驟:
此處進行兩項更改:
- 在頭部增加一個reduce: 0子句,指定我們將累加初始值為0的值
- 更改 for 主體以捕獲 acc 值(累加器),我們可以將當前平方值加到該值。
內建函數:Enum.sum
作為一般規則,我們應該以盡可能最高等級的方式表達我們想要轉換的資料。將 Enum.reduce 視為最低層級的函數轉換很有用,因為所有其他資料處理都可以用它來重寫。
Enum 模組包含大量高階函數,通常涉及將值清單減少為單一聚合值,例如總和、最大值或最小值。在本例中,我們想要元素的總和。
對於枚舉管道,這很簡單:
沒有辦法在推導式中表示這些高階聚合函數,因此我們可以將推導式的輸出透過管道傳送到 Enum.sum 呼叫中,類似於我們在 Python 中的做法:
通常應該避免混合不同的形式,特別是如果轉換是簡單的,因為它會減輕讀者的精神負擔 - 上面的reduce:形式儘管級別較低,但實際上閱讀起來更清晰。
Elixir 哪種表達方式比較好?
總而言之,我們最後得到了兩種可以被認為是慣用的形式。對於枚舉管道:
與理解:
易於閱讀的程式碼應該能夠直接瀏覽,沒有歧義或在表達式上結結巴巴。我認為這兩種形式都符合該標準,如:
- 它們遵循單一一致的形式 - 枚舉管道或推導式
- 每個表達式對應一個處理步驟
- 可以從上到下或從左到右不間斷地閱讀
結論
在 Elixir 中可以透過多種不同的方式來編寫這些轉換,並且程式碼庫很容易改變樣式,特別是當程式碼發生變化且處理隨著時間的推移變得更加複雜時。
PureType 可以分解和分析枚舉管道和推導式,以最清晰、最慣用的形式表示它們,了解您的偏好並提高程式碼對團隊中其他人的可讀性和清晰度。今天就來試試吧!
以上是Elixir 中的 For 迴圈和推導式 - 轉換命令式程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。

choosearraysoverlistsinpythonforbetterperformanceandmemoryfliceSpecificScenarios.1)largenumericaldatasets:arraysreducememoryusage.2)績效 - 臨界雜貨:arraysoffersoffersOffersOffersOffersPoostSfoostSforsssfortasssfortaskslikeappensearch orearch.3)testessenforcety:arraysenforce:arraysenforc

在Python中,可以使用for循環、enumerate和列表推導式遍歷列表;在Java中,可以使用傳統for循環和增強for循環遍歷數組。 1.Python列表遍歷方法包括:for循環、enumerate和列表推導式。 2.Java數組遍歷方法包括:傳統for循環和增強for循環。

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。