各位小夥伴們大家好,好久不見,這次小編要分享的一個知識是有關於函數式編程的。
函數式編程是近年來比較熱門的一個話題,很多人都在談FunctionalProgramming,函數式編程有如下特點:函數即為數據,第一等公民。
愛立信公司於上世紀八十年代開發出了Erlang語言來解決並發編程的問題。
之後,在網際網路的發展浪潮中,越來越多的語言也開始支持函數式編程: Python、JavaScript、Ruby、Haskell、Scala 等。
函數式通俗來講,就是用程式語言去實現數學函數。函數式=程式語言定義的函數+數學意義的函數。
這種函數內對象是永恆不變的,要麼參數是函數,要麼返回值是函數,沒有for和while循環,所有的循環都由遞歸去實現,無變量的賦值(即不用變量去保存狀態),無賦值即不改變。
狹義地說,函數式編程沒有可變的變量、循環等這些命令式編程方式中的元素,像數學裡的函數一樣,對於給定的輸入,不管你調用該函數多少次,永遠返回同樣的結果。
而在我們常用的命令式編程方式中,變量用來描述事物的狀態,整個程序,不過是根據不斷變化的條件來維護這些變量。
廣義地說,函數式編程重點在函數,函數是這個世界裡的一等公民,函數和其他值一樣,可以到處被定義,可以作為參數傳入另一個函數,也可以作為函數的返回值,返回給調用者。
利用這些特性,可以靈活組合已有函數形成新的函數,可以在更高層次上對問題進行抽象。
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。
函數就是面向過程的程序設計的基本單元。
而函數式編程——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
Python並非完全是函數式程式語言,在Python中,存在著可變更對象,也能寫出非純函數。但如果我們借鑑函數式編程,儘量在編程中避免副作用,就會有許多好處。
由於純函數相對獨立,我們不必擔心函數調用對其他函數的影響,所以使用起來更加簡單。另外,純函數也方便進行並行化運算,在並行化編程期間,我們經常擔心不同進程之間相互幹擾的問題。
函數式編程思維是對集合統一處理、統一操作,而命令式編程需要取出來每個單詞單獨處理,單獨計數。
而函數式只需要傳入待處理對象集合、處理規則,我們不需要關注於具體細節,這樣編程不僅僅減少了出現bug的概率而且提高了IT人員開發效率,函數式編程是給軟體開發者提供的另一套工具箱,為我們提供了另外一種抽象和思考的方式。
函數式程式語言強烈要求使用者編寫沒有副作用的函數,它的函數式數學意義上的函數,給定一個輸入就會有一個輸出,而且每次相同的輸入,輸出也肯定一樣,函數式中的變量所代表的意義並不是內存中的一塊存儲單元。
因此多個函數同時操作一個變量或者一個函數調用多次一個變量都不會改變該變量的值,函數每次對於給定的輸入都是作為一個新值來處理。
就是因為它這種沒有狀態、沒有副作用的理念,很適合大數據計算和處理,它只接受固定輸入既可以得到預定計算結果,完全不依賴於外部環境。
因此,函數式編程其特性非常適合於大數據處理、科學計算、數據統計等業務,隨著人工智慧、機器學習、深度學習的流行正在變得重要起來。
函數式編程就像是一個數學公式,我們直接拿過來用就好了,能夠理解這個數學公式是怎麼來的是再好不過了。
以上是小編整理的學習筆記,希望可以幫到大家,也歡迎各位小夥伴補充和糾錯:)