日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的函数式编程玩法+年末小感

發布時間:2025/6/15 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的函数式编程玩法+年末小感 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從小老師教編程語言就告訴分兩種:面向過程和面向對象,正如同小學電腦課面對的是win95,仿佛世界上windows就是操作系統的別名,如今還是這樣,高校的計算機中心都是windows,所以linux是要自己搞起,函數式編程也是要自己搞起的~不為學分不為獎學金不為工資只是追隨著自己的興趣,這才是最開心的哈~

? ? ? ? python有一大優點,就是既可以面向對象也可以面向過程還可以函數式搞起,因此想體驗函數式編程的樂趣不用換erlangh或scheme。函數式編程的特點:

1. 變量不可變;

2. 閉包性;


? ? ? ? 按照函數式編程的特點,一個函數只接受輸入并產生輸出,不會改變外部變量的值也不會用到外部變量的值。也正因為這樣,函數式編程一個函數只做一件事兒,方便模塊化,而且代碼量要少一些。


1.lambda

lambda是匿名函數,沒有函數名,在閉包里和map reduce中很好用。下面是求兩數乘積的函數:

[python]?view plaincopy
  • >>>func=lambda?x,y:x*y??
  • >>>func(3,4)??
  • 12??

  • 2.map

    map函數是對一個序列的每個項依次執行函數,下面是對一個序列每個項都乘以2:

    [python]?view plaincopy
  • >>>?a=map(lambda?x:x*2,[1,2,3])??
  • >>>?list(a)??
  • [2,?4,?6]??

  • 3.reduce

    reduce函數是對一個序列的每個項迭代調用函數,下面是求3的階乘:

    [python]?view plaincopy
  • >>>?functools.reduce(lambda?x,y:x*y,range(1,4))??
  • 6??

  • ? ? ? ? 好了,這就是python函數式編程常用的幾個函數,現在用一個求n的階乘的例子對比一下函數式編程和面向過程的編程的區別:

    [python]?view plaincopy
  • >>>?def?func(n):??
  • ...?????if?n==1:??
  • ...?????????????return?1??
  • ...?????return?n*func(n-1)??
  • ...???
  • >>>?func(4)??
  • 24??
  • ??
  • >>>?g=lambda?n:functools.reduce(lambda?x,y:x*y,range(1,n+1))??
  • >>>?g(4)??
  • 24??

  • ? ? ? ? 非常簡潔干凈~然后再看一下函數式編程的閉包:

    [python]?view plaincopy
  • >>>?def?funA():??
  • ...?????x=0??
  • ...?????def?funB():??
  • ...?????????????nonlocal?x??
  • ...?????????????x+=1??
  • ...?????????????print(x)??
  • ...?????return?funB??
  • ...???
  • >>>?a=funA()??
  • >>>?a()??
  • 1??
  • >>>?a()??
  • 2??
  • >>>?a()??
  • 3??

  • ? ? ? ? 閉包就是函數中又定義函數,里面的函數可以使用外部作用域內的變量,但不是全局變量,所以一次創建外部函數,則多次調用內部函數時外部作用域內的變量還是有效的;多次運行外部函數,則會重新創建閉包,原來外部變量的值也不會受到影響,如上例可以實現每次調用內部函數是的外部變量+1操作。這里說一下作用域的事兒,原來的python2只有全局作用域和局部作用域,python3新增的nonlocal作用域就是專門針對閉包的,nonlocal聲明的變量只能訪問外部作用域的變量,不能訪問全局作用域的變量,這樣就不用全局變量搞來搞去錯都不知道哪里出的了。

    ? ? ? ? 這篇文章寫完了,在2013的最后祝自己和大家新年愉快,為興趣而活~哈哈

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的python的函数式编程玩法+年末小感的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。