欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

列舉Python中吸引人的一些特性

 更新時(shí)間:2015年04月09日 09:07:27   作者:_Boz  
這篇文章主要介紹了Python中吸引人的一些特性,有助于初學(xué)者或者開發(fā)者在選擇編程語言時(shí)用作參考或入門指引,需要的朋友可以參考下

這里我不討論 python 的一些有用的庫或者框架,只從語言本身,最小支持的情況下談?wù)撨@門語言本身。語言的發(fā)展都是越來越接近Lisp,這也是Lisp這門語言偉大的原因。

下面我羅列一下我學(xué)習(xí) python 的原因:
多編程范式

python是一門多范式的編程語言,所謂的過程式,面向?qū)ο蠛秃瘮?shù)式的結(jié)合。

大部分人接觸編程語言都是從過程式開始的,原因是因?yàn)檫^程式的程序方式與計(jì)算機(jī)運(yùn)行方式是統(tǒng)一的,指令序列與運(yùn)行過程是統(tǒng)一的。如典型的C,我也是從C開始學(xué)習(xí)的,過程式的程序語言設(shè)計(jì)編寫程序較為簡單,但是符合人機(jī)交互思考方式。

python雖然是一門面向?qū)ο笳Z言,就連“ ”(空格)也可以看做是一個(gè)對(duì)象,但是python勝任過程式是沒有問題的。

如不需要使用類的靜態(tài)方法:

 def a_plus_b(a,b):
   return a+b

1. Duck typing

Python在設(shè)計(jì)的時(shí)候?qū)⑵洚?dāng)做一門面向?qū)ο蟮姆绞骄帉?,且不說面向?qū)ο蠼o軟件設(shè)計(jì)帶來的一些革命等,在python這樣的動(dòng)態(tài)語言中面向?qū)ο笥幸粋€(gè)亮點(diǎn)就是Duck typing(鴨子類型)。

關(guān)于鴨子類型,就是說,如果我認(rèn)為一個(gè)抽象的東西會(huì)游泳會(huì)“嘎嘎”叫,我就可以把它當(dāng)做鴨子。

 def use_duck( Duck ):
   Duck.swim()
   Duck.gaga()
 class Duck:
   def swim(self):
     ...
   def gaga(self):
     ...

如果這樣使用:
 little_duck = Duck()
 use_duck( little_duck )

關(guān)于Duck類,你可以給他取任何的名字,或者繼承它取另一個(gè)名字,只需要實(shí)現(xiàn) swim() gaga() 你就可以把它當(dāng)做鴨子。

關(guān)于鴨子類型,很多人不理解為什么不需要提供一個(gè)接口來規(guī)定鴨子的行為,我既不支持也不反對(duì),我的觀點(diǎn)是這樣的:

  •     對(duì)于參數(shù)的檢查,不符合動(dòng)態(tài)語言的特性
  •     提供了接口規(guī)范,那就不是鴨子類型了,直接叫多態(tài)得了

2. Python支持的函數(shù)式編程

首先是lambda 演算。

函數(shù)式編程的定義是將函數(shù)看做是變量一樣的待遇,變量在程序中最簡單的有什么待遇呢?

  •     可以賦值
  •     可以作為參數(shù)
  •     可以改變值(Erlang例外)
  •     且不說生命周期了和作用域了

λ演算背后蘊(yùn)含著計(jì)算機(jī)可計(jì)算性的深厚知識(shí),lambda也是圖靈模型,是停機(jī)問題的一個(gè)否定答案,不僅僅是一個(gè)匿名函數(shù)那樣簡單。

關(guān)于 lambda 演算,看看這個(gè)程序做了什么:

 map(lambda n:2*n,[1,2,3,4,5])

    lambda n:2*n 本身作為一個(gè)匿名函數(shù)
    lambda 本身作為一個(gè)參數(shù)傳入 map()函數(shù),這也就是說我的高階函數(shù),可以將函數(shù)變身看成是一個(gè)變量作為參數(shù)傳遞,這也是它作為函數(shù)受到的高等待遇

關(guān)于賦值和改變值,兩種方式:

    f = fun() 不改變函數(shù)狀態(tài),只改變名稱,但是說明函數(shù)是可以賦值的
    可以使用閉包作為改變函數(shù)的狀態(tài)方式,或者使用裝飾器來完成函數(shù)狀態(tài)改變

函數(shù)式編程的使用也可以提高程序的可讀性和減少代碼,而且能夠清晰的表達(dá)函數(shù)的功能,如MapReduce就是來自函數(shù)式編程的思想:

 Map(func,List)

作用是將func 作用于List中的每一個(gè)元素。

以剛才的例子舉例:

 map(lambda n:2*n,[1,2,3,4,5])

此函數(shù)返回

 [2,4,6,8,10]

重要的是在于知道這樣的方式帶給我們的清晰的設(shè)計(jì)方式。

當(dāng)然函數(shù)式編程不是那么幾句話就說完的,理解函數(shù)式編程的核心是理解 λ演算。
一些有意思的特性

1. 惰性計(jì)算:

看看完成一個(gè)斐波那契數(shù)列 python 可以怎么做:

 >>> def fib():
   a , b = 0 ,1
   while 1:
     yield b
     a , b = b ,a+b
 
 >>> f = fib()

實(shí)際上由yield 生成了一個(gè)可迭代對(duì)象,每次調(diào)用f.next()就可以產(chǎn)生一個(gè)斐波那契值,而函數(shù)的內(nèi)部狀態(tài)是由迭代對(duì)象存儲(chǔ)的。至于返回一個(gè)可迭代對(duì)象,如果需要確定迭代到多少位,可以使用 itertools.islice。

2. 協(xié)程

協(xié)程也是一個(gè)基于yield的概念,主要的模式是微線程的協(xié)作式工作模式:

 def coroutine(func):
   def ret():
     f = func()
     f.next()
     return f
   return ret
 
 @coroutine
 def consumer():
   print "Wait to getting a task"
   while 1:
     n = (yield)
     print "Got %s",n
  
 import time
 def producer():
   c = consumer()
   while 1:
     time.sleep(1)
     print "Send a task to consumer"
     c.send("task")
  
 if __name__ == "__main__":
 producer()

協(xié)程帶來的好處是可以直接調(diào)度你的線程,這也是它為什么叫做協(xié)程而不是線程的原因,線程屬于搶占式并發(fā),協(xié)程屬于協(xié)作式并發(fā)。
動(dòng)態(tài)語言帶來的好處

從程序設(shè)計(jì)帶來的快感(我相信只有熱愛這方面的人才有的感覺)來說,動(dòng)態(tài)語言,比如python,節(jié)約了更多的時(shí)間可以用來陪女朋友或者老婆,或者老公。

當(dāng)然,作為互聯(lián)網(wǎng)時(shí)代快速開發(fā)來說,趕鴨子上線,也是《黑客與畫家》上面介紹的,快速開發(fā)很重要,當(dāng)然需要符合這方面的需求。

動(dòng)態(tài)語言的CPU密集型運(yùn)算必然比不過C/C++。

總之:人生苦短,我用python。

相關(guān)文章

  • python 使用遞歸回溯完美解決八皇后的問題

    python 使用遞歸回溯完美解決八皇后的問題

    今天小編就為大家分享一篇python 使用遞歸回溯完美解決八皇后的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Django debug為True時(shí),css加載失敗的解決方案

    Django debug為True時(shí),css加載失敗的解決方案

    這篇文章主要介紹了Django debug為True時(shí),css加載失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 200行python代碼實(shí)現(xiàn)貪吃蛇游戲

    200行python代碼實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了200行python代碼實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 詳解Python3中setuptools、Pip安裝教程

    詳解Python3中setuptools、Pip安裝教程

    這篇文章主要介紹了詳解Python3中setuptools、Pip安裝教程,文中給大家提到了注意事項(xiàng),需要的朋友可以參考下
    2019-06-06
  • python 獲取當(dāng)天每個(gè)準(zhǔn)點(diǎn)時(shí)間戳的實(shí)例

    python 獲取當(dāng)天每個(gè)準(zhǔn)點(diǎn)時(shí)間戳的實(shí)例

    今天小編就為大家分享一篇python 獲取當(dāng)天每個(gè)準(zhǔn)點(diǎn)時(shí)間戳的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 在PyTorch中使用標(biāo)簽平滑正則化的問題

    在PyTorch中使用標(biāo)簽平滑正則化的問題

    這篇文章主要介紹了如何在PyTorch中使用標(biāo)簽平滑正則化的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python中使用dwebsocket實(shí)現(xiàn)后端數(shù)據(jù)實(shí)時(shí)刷新

    Python中使用dwebsocket實(shí)現(xiàn)后端數(shù)據(jù)實(shí)時(shí)刷新

    dwebsocket是Python中一款用于實(shí)現(xiàn)WebSocket協(xié)議的庫,可用于后端數(shù)據(jù)實(shí)時(shí)刷新。在Django中結(jié)合使用dwebsocket和Channels,可以實(shí)現(xiàn)前后端的實(shí)時(shí)通信,支持雙向數(shù)據(jù)傳輸和消息推送,適用于實(shí)時(shí)聊天、數(shù)據(jù)監(jiān)控、在線游戲等場景
    2023-04-04
  • 詳解Python中深淺拷貝的使用及注意事項(xiàng)

    詳解Python中深淺拷貝的使用及注意事項(xiàng)

    Python中的深淺拷貝是經(jīng)常被使用的概念,對(duì)于初學(xué)者來說可能會(huì)比較難以理解,本文將詳細(xì)闡述Python深淺拷貝的概念、使用場景、注意事項(xiàng)以及如何實(shí)現(xiàn)深淺拷貝
    2023-04-04
  • 如何利用python多線程爬取天氣網(wǎng)站圖片并保存

    如何利用python多線程爬取天氣網(wǎng)站圖片并保存

    最近做個(gè)天 氣方面的APP需要用到一些天氣數(shù)據(jù),所以下面這篇文章主要給大家介紹了關(guān)于如何利用python多線程爬取天氣網(wǎng)站圖片并保存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • Python 列表與鏈表的區(qū)別詳解

    Python 列表與鏈表的區(qū)別詳解

    這篇文章主要介紹了Python 列表與鏈表的區(qū)別詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評(píng)論