Python中的函數式編程教程,學會用一行代碼搞定

2021-03-02 數學中國

為了理解map,讓我們首先看看什麼是iterables。iterable是任何可以迭代的東西。通常這些是列表或數組,但是Python有許多不同類型的迭代器。您甚至可以創建自己的對象,這些對象可以使用Python中魔法方法進行迭代。這裡有兩個方法:

class Counter:    def __init__(self, low, high):        # set class attributes inside the magic method __init__        # for "inistalise"        self.current = low        self.high = high
    def __iter__(self):        # first magic method to make this object iterable        return self    def __next__(self):        # second magic method        if self.current > self.high:            raise StopIteration        else:            self.current += 1 return self.current - 1

「魔法方法是python內置方法,不需要主動調用,存在的目的是為了給python的解釋器進行調用,幾乎每個魔法方法都有一個對應的內置函數,或者運算符,當我們對這個對象使用這些函數或者運算符時就會調用類中的對應魔法方法,可以理解為重寫內置函數。」

第一個神奇的方法是用「__ iter__」返回迭代對象,通常在循環開始時使用。

如果我們運行:

for c in Counter(3, 8):    print(c)

那麼將會輸出:

在Python中,迭代器是一個對象,它只有一個簡單的魔法方法。這意味著您可以訪問對象中的位置,但不能遍歷對象。有些對象將使用方法__next__,如上面代碼中第二個例子。

現在我們知道了什麼是可迭代對象,讓我們回到map函數。map函數允許我們將一個函數應用到iterable中的每個項。通常,我們希望對列表中的每一項都應用一個函數,但是要知道對於大多數迭代器來說都是可能的。Map接受兩個輸入,即要應用的函數和可迭代的對象:

假設我們有一個列表:

我們希望將列表中的每一個數字進行平方,那麼可以這麼寫代碼:

x = [1, 2, 3, 4, 5]
def square(num): return num*num
print(list(map(square, x)))

Python中的函數是惰性的。如果我們代碼中不包含「list()」,函數將存儲迭代的定義,而不是一個列表。我們需要顯式地告訴Python「將這個轉換為一個列表」,以便我們使用它。

現在寫一個像「square(num)」這樣的普通函數很好,但是它看起來不太對。我們必須定義一個完整的函數才能在map中使用一次?我們可以使用lambda(匿名)函數在map中定義一個函數。

相關焦點

  • Python代碼轉Latex公式,這個開源庫用一行代碼幫你搞定
    數學計算的結果往往會影響後續代碼的運行過程,而複雜的數學公式更容不得一點錯漏,因此對於包含較多複雜數學公式的 Python 代碼,用 handcalcs 進行自查或許是有必要的。  如何使用 handcalcs?  那麼,這個開源庫要如何應用呢?
  • 用python繪畫一顆愛你的心,不光可以用來撩女神,還能學知識
    很簡單,給自己創建一個對象就好了,下面羽憶教程為你介紹如何用python畫愛心,讓你離你的女神更近一步。python繪畫愛心python繪畫愛心python編程為了讓你學會如何撩妹,很親切的為你安裝了Turtle繪圖庫。只需要在python程序中引入turtle即可自由繪畫,思維好,畫個地球出來也是小意思。
  • 人生第一行經典代碼,決定程式設計師的出身,更決定程式設計師的職業生涯
    入門語言與職業生涯在計算機編程領域,人生第一行經典代碼——"hello,world!",往往決定了程式設計師的出身,更決定了程式設計師的職業生涯。第一行代碼,決定的是未來程式設計師的入門程式語言。所以,換而言之,程式設計師的入門語言,決定了程式設計師的教育背景,也決定了未來編程路上能走多遠。
  • python入門第十三課:文件的讀寫與分析介紹,異常處理和代碼重構
    ##本教程使用的課本是《Python編程:從入門到實踐》,作者:[美] Eric Matthes學完前面十二節課,已完成Python編程入門了,我們已經能編寫組織有序而易於使用的Python程序了。接來下繼續學習更多應用操作,比如文件操作、數據存儲、異常處理等,這些技巧能讓我們快速的處理大量的數據,讓程序更加健壯。
  • 揭 秘 | 用Python寫了自動化交易程序,2年躺著賺了200萬?!
    )4周——下載一些Python的學習文檔,比如《簡明Python教程》,《笨辦法學Python》等等。通過學習語法,掌握Python中的關鍵字語法,函數語法,數學表達式、變量、數據結構、語法等等等。我們可以在交互環境中先熟悉使用其中的函數,如果遇到函數的使用上的問題,可以參考Python 安裝後的自帶chm幫助文件。2周——為了更好得掌握Python,我們的學習不能只是停留在學習一些語法或者api階段。
  • Python 2和Python 3代碼有哪些區別?
    最近的項目開始用Python3寫了,也體會了一下2和3的區別。主要的一些區別在以下幾個方面: print函數Python 2中print是語句(statement),Python 3中print則變成了函數。
  • 被「嫌棄」的分號的一生:不要在Python中使用無用分號了
    圖源:unsplash我常在C / C ++語言中看到很多分號。在代碼中,分號表示語句終止。Python並未強制使用分號來分隔語句,但因為分號導致Python亂碼的情況可不少。圖源:unsplash在許多大眾的程式語言中,需要在每個語句的末尾添加分號。
  • 一行代碼能做什麼?看到最後一個我終於忍不住……
    技術能力的提升需要不斷的學習和實踐,面對一行行枯燥的代碼,做出有趣的事情,更能增加學習的興趣和樂趣。那一行python代碼能做出什麼有趣的東西?C/C++有什麼趣味設計?有哪些趣味的Scratch小遊戲?
  • 這個技能一分鐘搞定
    3.美食博主式。看了美食教程就想跟著做,眼睛學會了可手還沒學會,不管能吃不能吃,糧食倒是沒少浪費。什麼10秒鐘批量下載場景紋理、PBR貼圖、ZB筆刷、分類貼圖、世界名畫等素材;什麼利用程序化節點完成,直接簡化了流程;什麼用200行代碼做出漂亮股市分析圖;什麼分分鐘就摳完300張圖...誒好像跑偏了,
  • 推薦幾款可以直接在手機上編程的app(包含Java、C、Python等)
    4.AIDE完全兼容Eclipse項目,只需要將源碼複製到你的設備中,然後打開,就可以繼續編寫代碼。2.測試代碼如下,這裡編寫了2個函數,分別是2數之和和2數隻差,很簡單:軟體特點1.享用bash 和 zsh2.運用nano 和 vim修改文件3.經過ssh拜訪伺服器4.運用gcc和clang編譯代碼5.運用python控制臺來作為口袋計算器6.運用git 和 subversion查看項目7.運用frotz運轉根據文本的遊戲推薦安裝包
  • 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%
    其實某個特定程序(無論使用何種程式語言)的運行速度是快還是慢,在很大程度上取決於編寫該程序的開發人員自身素質,以及他們編寫優化而高效代碼的能力。Medium上一位小哥就詳細講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問題,而是代碼本身的問題。
  • 單片機上運行Python-MicroPython(三)
    堆空間當運行中的程序實例化對象時,所需的RAM資源會從一個固定大小的內存池中被申請和分配,該內存池即為堆空間。當對象超過作用域後(或者說其不再可用時),該對象即被稱作"垃圾"資源。此時,一個單獨的進程,被稱作"垃圾回收器",會收回其所佔內存並將其內存返回到可用的堆空間中。該進程會在後臺自動運行,你也可以直接顯式地使用gc.collect()對該過程進行調用。
  • opencv-python獲取圖像:面向對象與面向過程
    下面是分別用面向過程與面向對象的編程方法實現讀取本地圖像和打開攝像頭兩段代碼:# -*- coding: utf-8 -*-"""面向過程的編程方法,用函數把解決問題的步驟一步一步實現。運行環境:win10系統 python==3.6 opencv-contrib-python== 4.1.0第一行「# -*- coding: utf-8 -*-」 告訴Python解釋器,按照UTF-8編碼讀取原始碼"""import cv2image=cv2.imread('lena.JPG') #讀取本地圖片,
  • 使用Python的concurrent.futures輕鬆實現並發編程
    此外,由於全局解釋器鎖的存在,進一步限制了編寫真正並發的代碼。但為了理智起見,你可以這樣簡化並發編程,而不必大錯特錯:   在Python中,如果手頭的任務是I/O密集型,可以使用標準庫的threading 模塊,或者如果任務是計算密集型,那麼multiprocessing模塊很有助益。
  • 5個助你效率提升的python小技巧
    使用交互模式使用python -i xxxx.py可以直接進入python的交互模式,可以很方便的調用xxxx.py中定義的方法和函數,特別適合調試沒有main()方法的文件,強力推薦。,所以簡單記住想調試的時候用下面這兩行代碼import pdbpdb.set_trace()這應該比pycharm香吧。
  • Python漫畫爬蟲——漫畫喵的100行代碼逆襲
    這時候python、pip等工具就變成使用這個新環境的了,當然也可以使用which python來查看。3. 安裝selenium進入新環境後,pip安裝的依賴庫都會在新環境中安裝,不會影響主機自身的python。使用pip 安裝selenium:至此,我們的基本環境就搭建完了。4.
  • Python 初學者進階的九大技能
    切記,在大多數IDE中,可以摺疊循環和if語句,從而更容易查看正在使用的部分。右側是摺疊了if/else語句的ATOM另一種辦法是將你的代碼通過 www.pythontutor.com可視化,就可以逐行查看代碼運行的方式了。
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    在當今社會,網際網路上充斥著許多有用的數據。我們只需要耐心觀察並添加一些技術手段即可獲得大量有價值的數據。而這裡的「技術手段」就是指網絡爬蟲。 今天,小編將與您分享一個爬蟲的基本知識和入門教程:什麼是爬蟲?網絡爬蟲,也叫作網絡數據採集,是指通過編程從Web伺服器請求數據(HTML表單),然後解析HTML以提取所需的數據。
  • 騰訊大佬的 Python 編碼規範
    解釋器聲明編碼格式聲明模塊注釋或文檔字符串模塊導入常量和全局變量聲明頂級定義(函數或類定義)執行代碼編碼格式聲明通常,編碼格式聲明是必需的。如果 python 源碼文件沒有聲明編碼格式,python 解釋器會默認使用 ASCII 編碼,一旦源碼文件包含非ASCII編碼的字符,python 解釋器就會報錯。以 UTF-8 為例,以下兩種編碼格式聲明都是合乎規則的。我一直 UTF-8 編碼格式,喜歡使用第一種聲明方式。Windows 平臺上,編碼格式聲明必須位於 python 文件的第一行。