python的函数式编程玩法+年末小感
從小老師教編程語言就告訴分兩種:面向過程和面向對象,正如同小學電腦課面對的是win95,仿佛世界上windows就是操作系統的別名,如今還是這樣,高校的計算機中心都是windows,所以linux是要自己搞起,函數式編程也是要自己搞起的~不為學分不為獎學金不為工資只是追隨著自己的興趣,這才是最開心的哈~
? ? ? ? python有一大優點,就是既可以面向對象也可以面向過程還可以函數式搞起,因此想體驗函數式編程的樂趣不用換erlangh或scheme。函數式編程的特點:
1. 變量不可變;
2. 閉包性;
? ? ? ? 按照函數式編程的特點,一個函數只接受輸入并產生輸出,不會改變外部變量的值也不會用到外部變量的值。也正因為這樣,函數式編程一個函數只做一件事兒,方便模塊化,而且代碼量要少一些。
1.lambda
lambda是匿名函數,沒有函數名,在閉包里和map reduce中很好用。下面是求兩數乘積的函數:
[python]?view plaincopy
2.map
map函數是對一個序列的每個項依次執行函數,下面是對一個序列每個項都乘以2:
[python]?view plaincopy
3.reduce
reduce函數是對一個序列的每個項迭代調用函數,下面是求3的階乘:
[python]?view plaincopy
? ? ? ? 好了,這就是python函數式編程常用的幾個函數,現在用一個求n的階乘的例子對比一下函數式編程和面向過程的編程的區別:
[python]?view plaincopy
? ? ? ? 非常簡潔干凈~然后再看一下函數式編程的閉包:
[python]?view plaincopy
? ? ? ? 閉包就是函數中又定義函數,里面的函數可以使用外部作用域內的變量,但不是全局變量,所以一次創建外部函數,則多次調用內部函數時外部作用域內的變量還是有效的;多次運行外部函數,則會重新創建閉包,原來外部變量的值也不會受到影響,如上例可以實現每次調用內部函數是的外部變量+1操作。這里說一下作用域的事兒,原來的python2只有全局作用域和局部作用域,python3新增的nonlocal作用域就是專門針對閉包的,nonlocal聲明的變量只能訪問外部作用域的變量,不能訪問全局作用域的變量,這樣就不用全局變量搞來搞去錯都不知道哪里出的了。
? ? ? ? 這篇文章寫完了,在2013的最后祝自己和大家新年愉快,為興趣而活~哈哈
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python的函数式编程玩法+年末小感的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 抽屉效果的导航菜单实现
- 下一篇: Python一些特殊用法(map、red