我為什麼要學習python

2021-07-31 16:50:37 字數 3296 閱讀 5314

引言:學習python近兩年,談談我對於python的一點小理解,也從一些方面談談自己微薄的想法,也就是我為什麼學習python

這裡我不討論python的一些有用的庫或者框架,只從語言本身,最小支援的情況下談論這門語言本身。

語言的發展都是越來越接近lisp,這也是這門語言偉大的原因。

下面我羅列一下我學習python的原因:

一.多程式設計正規化

python是一門多正規化的程式語言,所謂的過程式,物件導向和函式式的結合。

大部分人接觸程式語言都是從過程式開始的,原因是因為過程式的程式方式與計算機執行方式是統一的,指令序列與執行過程是統一的

如典型的c,我也是從c開始學習的,過程式的程式語言設計編寫程式較為簡單,但是符合人機互動思考方式。

python雖然是一門物件導向語言,就連「 」(空格)也可以看做是乙個物件,但是python勝任過程式是沒有問題的。

如不需要使用類的靜態方法:

def

a_plus_b(a,b):

return a+b

python在設計的時候將其當做一門物件導向的方式編寫,且不說物件導向給軟體設計帶來的一些革命等,在python這樣的動態語言中物件導向有乙個亮點就是duck typing(鴨子型別)

關於鴨子型別,就是說,如果我認為乙個抽象的東西會游泳會「嘎嘎」叫,我就可以把它當做鴨子。

def

use_duck( duck ):

duck.swim()

duck.gaga()

class

duck:

defswim(self):

...def

gaga(self):

...

如果這樣使用

little_duck = duck()

use_duck( little_duck )

關於duck類,你可以給他取任何的名字,或者繼承它取另乙個名字,只需要實現 swim() gaga() 你就可以把它當做鴨子

關於鴨子型別,很多人不理解為什麼不需要提供乙個介面來規定鴨子的行為,我既不支援也不反對,我的觀點是這樣的:

1.對於引數的檢查,不符合動態語言的特性

2.提供了介面規範,那就不是鴨子型別了,直接叫多型得了

關於python支援的函式式程式設計

首先是lambda 演算

函式式程式設計的定義是將函式看做是變數一樣的待遇,變數在程式中最簡單的有什麼待遇呢

1.可以賦值

2.可以作為引數

3.可以改變值(erlang例外)

4.且不說生命週期了和作用域了

λ演算背後蘊含著計算機可計算性的深厚知識,lambda也是圖靈模型,是停機問題的乙個否定答案。不僅僅是乙個匿名函式那樣簡單

關於lambda 演算,看看這個程式做了什麼

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

1.lambda n:2*n 本身作為乙個匿名函式

2.lambda 本身作為乙個引數傳入 map()函式 ,這也就是說我的高階函式,可以將函式變身看成是乙個變數作為引數傳遞,這也是它作為函式受到的高等待遇

關於賦值和改變值,兩種方式:

1.f = fun() 不改變函式狀態,只改變名稱,但是說明函式是可以賦值的

2.可以使用閉包作為改變函式的狀態方式,或者使用裝飾器來完成函式狀態改變

函式式程式設計的使用也可以提高程式的可讀性和減少**,而且能夠清晰的表達函式的功能,如mapreduce就是來自函式式程式設計的思想

map(func,list)

作用是將func 作用於list中的每乙個元素

以剛才的例子舉例

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

此函式返回

[2,4,6,8,10]

重要的是在於知道這樣的方式帶給我們的清晰的設計方式

當然函式式程式設計不是那麼幾句話就說完的,理解函式式程式設計的核心是理解 λ演算

二.一些有意思的特性

惰性計算:

看看完成乙個斐波那契數列python 可以怎麼做:

>>> def

fib():

a , b = 0 ,1

while 1:

yield

b a , b = b ,a+b

>>> f = fib()

實際上由yield 生成了乙個可迭代物件,每次呼叫

f.next()就可以產生乙個斐波那契值,而函式的內部狀態是由迭代物件儲存的

至於返回乙個可迭代物件,如果需要確定迭代到多少位,可以使用 itertools.islice

協程:協程也是乙個基於yield的概念,主要的模式是微執行緒的協作式工作模式:

1

defcoroutine(func):

2def

ret():

3 f =func()

4f.next()

5returnf6

return

ret789

10@coroutine

11def

consumer():

12print

"wait to getting a task"13

while 1:

14 n = (yield)15

print

"got %s",n

1617

1819

import

time

20def

producer():

21 c =consumer()

22while 1:

23 time.sleep(1)

24print

"send a task to consumer

"25 c.send("

task")

2627

if__name__ == "

__main__":

28 producer()

協程帶來的好處是可以直接排程你的執行緒,這也是它為什麼叫做協程而不是執行緒的原因,執行緒屬於搶占式併發,協程屬於協作式併發

三.動態語言帶來的好處

從程式設計帶來的快感(我相信只有熱愛這方面的人才有的感覺)來說,動態語言,比如python,節約了更多的時間可以用來陪女朋友或者老婆,或者老公

當然,作為網際網路時代快速開發來說,趕鴨子上線,也是《黑客與畫家》上面介紹的,快速開發很重要,當然需要符合這方面的需求

動態語言的cpu密集型運算必然比不過c/c++

總之:人生苦短,我用python

原 我為什麼要學習python

引言 學習python近兩年,談談我對於python的一點小理解,也從一些方面談談自己微薄的想法,也就是我為什麼學習python 這裡我不討論python的一些有用的庫或者框架,只從語言本身,最小支援的情況下談論這門語言本身。語言的發展都是越來越接近lisp,這也是這門語言偉大的原因。下面我羅列一下...

我為什麼要學習python程式設計?

為什麼要學習python程式設計?在開始學習之前,不只是身邊的朋友也在問,更多的是自己內心也不斷的問,為什麼要學習python程式設計,僅僅是為了了解,如果是為了了解上網一天的功夫就能了解個大概。當那天在群裡看到乙個朋友用程式幫助業務提高效率,做出乙個 來,大大提高了業務的效率,節省了很多時間和麻煩...

我為什麼要學習?

我為什麼要學習?為了更聰明,更有邏輯,更能看透本質。學習什麼?人工智慧演算法,統計學,數學。用來幹什麼?1 對眼前工作。更準且穩的分類模型,是可以帶來直接經濟效益的。有利於公司業務。更具體是,1 歸一化原始資料練乙個邏輯回歸。2 從準確率召回率圖,重新分箱。2 我的長期目標。假如我到了乙個,真正大業...