python學習感想
『壹』 心得分享!python面試都要做哪些准備
首先,准備好簡歷。找工作,最開始競爭的是什麼?最開始競爭的是簡歷。你到任何一家公司應聘,第一件要做的事情就是投簡歷,簡歷是應聘公司了解你的第一窗口,也是應聘公司了解你的第一途徑。一份好的簡歷可以讓你在眾多的簡歷中脫穎而出,給招聘者留下深刻印象,然後決定給你面試通知,它是幫助你成功面試的敲門磚。
其次,對於Python常見面試問題要有了解。在面試前我們一定要通過各種渠道了解Python面試中常見的面試問題,做到心中有數。在Python的面試中,一些Python基本常識問題,有些面試官還是會考察的,如果你連基本的常識問題都回答不上來,那麼你後面的面試可能無法進行下去,如果能勉強進行下去,最後面試的成功率也會降低。
最後,在面試前准備一套大方得體的服裝。穿著得體表現的是對面試的尊重。穿著得體,會給面試官一種愉悅的心情。相反,如果你穿著比較邋遢,當面試官看到你的時候,會覺得你不注意細節,有的面試官甚至會懷疑你的工作能力,這樣會給面試官留下非常不好的印象,也可能最後導致面試的失敗。
如果在面試前你做好充足的准備,面試官會覺得你是一個對於工作認真、態度真誠的一個人,會增加心裡認同感,也會增加面試的成功率。
關於心得分享!Python面試都要做哪些准備,環球青藤小編就和大家分享到這里了,學習是永無止境的,學習一項技能更是受益終身,所以,只要肯努力學,什麼時候開始都不晚。如果您還想繼續了解關於python編程的學習方法及素材等內容,可以點擊本站其他文章學習。
『貳』 初學python,感受和C的不同 / 藍訊
和C不一樣,Python是一種動態類型語言,又是強類型語言。這個分類怎麼理解呢?大概是可以按照下列說明來分類的:
靜態類型語言
一種在編譯期間就確定數據類型的語言。大多數靜態類型語言是通過要求在使用任一變數之前聲明其數據類型來保證這一點的。Java和 C 是靜態類型語言。
動態類型語言
一種在運行期間才去確定數據類型的語言,與靜態類型相反。Python 是動態類型的,因為它們確定一個變數的類型是在您第一次給它賦值的時候。
強類型語言
一種總是強制類型定義的語言。Java 和 Python 是強制類型定義的。您有一個整數,如果不明確地進行轉換 ,不能將把它當成一個字元串。
『叄』 初學python,感受和C的不同
從開始看Python到現在也有半個多月了,前後看了Python核心編程和Dive
into
Python兩本書。話說半個月看兩本,是個人都知道有多囫圇吞棗,這也是因為我暫時沒有需求拿這個做大型開發,主要是平時的小程序test用一用。所以我的策略是,整體瀏覽,用到時候現查。話說這核心編程第一版太古老了,老在講2.2之前的東西,我看的翻譯電子版,翻譯得也不好,很晦澀。看完這個後還有點雲里霧里,看網上人家說DIP好,啄木鳥還有免費電子文檔,就找來看這個。怎麼說呢,講的比核心編程好,但不適合第一次看的初學者。我之所以覺得講得好,是因為看核心編程,有些概念還有些模糊,看了這本書就明白不少了。要是初學者上來就看這本,保證不好理解。
下面就是在學習的過程中,在翻閱資料的過程中,總結的一些C和python比較明顯的不同之處,有大方向的,也有細節的。肯定沒有總結完,比如動態函數,lambda這些,我都懶得往上寫了。實際上,作為兩種完全不同的語言,下面這些差異只是冰山一角而已。權當拋磚引玉吧,至少應該對和我有相同研究興趣,正在考慮是否學習另一門語言的朋友有點幫助。此文也算是DIP的學習筆記吧。順帶說一句,要是有朋友了解,可以幫忙推薦一下實戰性強的Python教材,語言這東西,不多練手,光比劃,是不可能學好的。
學習目的
我的以後的研究方向是嵌入式,顯然,c語言是我的主要語言。我不是一個語言愛好者,我以前覺得,對於做研究而不是應用的人來說,了解多門語言,不如精通一門語言。之所以去看python,主要還是因為python更有利於快速開發一些程序,也是因為現在認識到,研究和應用是不能分離的。個人以為,要想在計算機工程的競爭中立足,必須懂C語言。因為真正要做高性能編程,
不可能將機器的體系架構拋到腦後讓Python虛擬機(或Java虛擬機等)幫你搞定所有底層。越來越多的CPU
core,越來越恐怖的內存性能瓶頸,對於上層開發人員來說,無所謂,但是對高性能程序開發人員來說,這些是無法透明的。很多應用,還是自己掌控比較有效。這些場合中,匯編和C還是不可替代的。但是,光知道C是不夠的,掌握一門面向對象語言,相對更高層的語言,不僅對以後的個人發展有利,也會對自己的技術認識產生幫助。
如果要問對我來說誰更重要,我覺得還是C更重要。C的學習曲線更陡,貌似簡單,實際上到處都是陷阱,看上去比較簡單低效的程序,也不是學1,2個月就能搞定的。談到優化的深層次和難度嘛,需要的功底是按年算的。但是一旦你C語言的基礎打好了,對計算機的理解,對其他語言的理解都是大有裨益的。比如,如果你有C基礎,可以說,學過1天python,就能寫的出來一些不短的程序。後面的優化也不是什麼大不了的演算法,都是非常基本的語句換來換去。當然這里不是說
Python不好,實際上,上層應用,Python比C方便的不是一個層次。
很多人覺得,既然懂C了,那麼進一步掌握C++應該是水到渠成,但C++不是C的超集,而我又不喜歡C++的繁瑣和巨大,所以才決定看一看Python。我很喜歡Python的優雅與快捷。
語言類型
和C不一樣,Python是一種動態類型語言,又是強類型語言。這個分類怎麼理解呢?大概是可以按照下列說明來分類的:
靜態類型語言
一種在編譯期間就確定數據類型的語言。大多數靜態類型語言是通過要求在使用任一變數之前聲明其數據類型來保證這一點的。Java和 C 是靜態類型語言。
動態類型語言
一種在運行期間才去確定數據類型的語言,與靜態類型相反。Python 是動態類型的,因為它們確定一個變數的類型是在您第一次給它賦值的時候。
強類型語言
一種總是強制類型定義的語言。Java 和 Python 是強制類型定義的。您有一個整數,如果不明確地進行轉換 ,不能將把它當成一個字元串。
弱類型語言
一種類型可以被忽略的語言,與強類型相反。VBScript 是弱類型的。在 VBScript 中,您可以將字元串 』12′ 和整數 3 進行連接得到字元串』123′,然後可以把它看成整數 123 ,所有這些都不需要任何的顯示轉換。
對象機制
具體怎麼來理解這個「動態確定變數類型」,就要從Python的Object對象機制說起了。Objects(以下稱對象)是Python對於數據的抽象,Python中所有的數據,都是由對象或者對象之間的關系表示的,函數是對象,字元串是對象,每個東西都是對象的概念。每一個對象都有三種屬性:實體,類型和值。理解實體是理解對象中很重要的一步,實體一旦被創建,那麼就一直不會改變,也不會被顯式摧毀,同時通常意義來講,決定對象所支持的操作方式的類型(type,包括number,string,tuple及其他)也不會改變,改變的只可能是它的值。如果要找一個具體點的說明,實體就相當於對象在內存中的地址,是本質存在。而類型和值都只是實體的外在呈現。然後Python提供一些介面讓使用者和對象交互,比如id()函數用來獲得對象實體的整形表示(實際在這里就是地址),type()函數獲取其類型。
這個object機制,就是c所不具備的,主要體現在下面幾點:
1 剛才說了,c是一個靜態類型語言,我們可以定義int a, char
b等等,但必須是在源代碼裡面事先規定。比如我們可以在Python裡面任意一處直接規定a =
「lk」,這樣,a的類型就是string,這是在其賦值的時候才決定的,我們無須在代碼中明確寫出。而在C裡面,我們必須顯式規定char *a =
「lk」,也就是人工事先規定好a的類型
2 由於在C中,沒有對象這個概念,只有「數據的表示」,比如說,如果有兩個int變數a和b,我們想比較大小,可以用a ==
b來判斷,但是如果是兩個字元串變數a和b,我們就不得不用strcmp來比較了,因為此時,a和b本質上是指向字元串的指針,如果直接還是用==比較,那比較的實際是指針中存儲的值——地址。
在Java中呢,我們通過使用 str1 == str2 可以確定兩個字元串變數是否指向同一塊物理內存位置,這叫做「對象同一性」。在 Java 中要比較兩個字元串值,你要使用 str1.equals(str2)。
然後在Python中,和前兩者都不一樣,由於對象的引入,我們可以用「is」這個運算符來比較兩個對象的實體,和具體對象的type就沒有關系了,比如你的對象是tuple也好,string也好,甚至class也好,都可以用」is」來比較,本質上就是「對象同一性」的比較,和Java中的==類似,和
C中的pointer比較類似。Python中也有==比較,這個就是值比較了。
3
由於對象機制的引入,讓Python的使用非常靈活,比如我們可以用自省方法來查看內存中以對象形式存在的其它模塊和函數,獲取它們的信息,並對它們進行操作。用這種方法,你可以定義沒有名稱的函數,不按函數聲明的參數順序調用函數,甚至引用事先並不知道名稱的函數。
這些操作在C中都是不可想像的。
4 還有一個很有意思的細節,就是類型對對象行為的影響是各方面的,比如說,a = 1; b =
1這個語句中,在Python裡面引發的,可能是a,b同時指向一個值為1的對象,也可能是分別指向兩個值為1的對象。而例如這個語句,c = []; d
= [],那麼c和d是肯定指向不同的,新創建的空list的。沒完,如果是」c = d =
[]「這個語句呢?此時,c和d又指向了相同的list對象了。這些區別,都是在c中沒有的。
最後,我們來說說為什麼python慢。主要原因就是function call overhead比較大。因為所有東西現在都是對象了,contruct 和destroy 花費也大。連1 + 1 都是 function call,像』12′+』45′ 這樣的要 create a third string object, then calls the string obj』s __add。可想而知,速度如何能快起來?
列表和數組
分析Python中的list和C中的數組總是很有趣的。相信可能一些朋友和一樣,初學列表的時候,都是把它當作是數組來學的。最初對於list和數組區別的定性,主要是集中在兩點。首先,list可以包含很多不同的數據類型,比如
["this", 1, "is", "an", "array"]
這個List,如果放在C中,其實是一個字元串數組,相當於二維的了。
其次呢,list有很多方法,其本身就是一個對象,這個和C的單純數組是不同的。對於List的操作很多樣,因為有方法也有重載的運算符。也帶來一些問題,比如下面這個例子:
加入我們要產生一個多維列表,用下面這個語句
A = [[None] * 2] * 3
結果,A的值會是
[[None, None], [None, None], [None, None]]
初一看沒問題,典型的二維數組形式的列表。好,現在我們想修改第一個None的值,用語句
A[0][0] = 5
現在我們再來看看A的值:
[[5, None], [5, None], [5, None]]
發現問題沒有?這是因為用 * 來復制時,只是創建了對這個對象的引用,而不是真正的創建了它。 *3 創建了一個包含三個引用的列表,這三個引用都指向同一個長度為2的列表。其中一個行的改變會顯示在所有行中,這當然不是你想要的。解決方法當然有,我們這樣來創建
A = [None]*3
for i in range(3):
A[i] = [None] * 2
這樣創建了一個包含三個不同的長度為2的列表。
所以,還是一直強調的,越復雜的東西,越靈活,也越容易出錯。
代碼優化
C是一個很簡單的語言,當我們考慮優化的時候,通常想得也很簡單,比如系統級調用越少越好(緩沖區機制),消除循環的低效率和不必要的系統引用,等等,其實主要都是基於系統和硬體細節考慮的。而Python就完全不一樣了,當然上面說的這些優化形式,對於Python仍然是實用的,但由於
Python的語法形式千差萬別,庫和模塊多種多樣,所以對於語言本身而言,就有很多值得注意的優化要點,舉幾個例子吧。
比如我們有一個list L1,想要構建一個新的list L2,L2包括L1的頭4個元素。按照最直接的想法,代碼應該是
L2 = []
for i in range[3]:
L2.append(L1[i])
而更加優化和優美的版本是
L2 = L1[:3]
再比如,如果s1..s7是大字元串(10K+),那麼join([s1,s2,s3,s4,s5,s6,s7])就會比
s1+s2+s3+s4+s5+s6+s7快得多,因為後者會計算很多次子表達式,而join()則在一次過程中完成所有的復制。還有,對於字元串操作,對字元串對象使用replace()方法。僅當在沒有固定字元串模式時才使用正則表達式。
所以說,以優化為評判標准,如果說C是短小精悍,Python就是博大精深。
include和import
在C語言中的include非常簡單,因為形式單一,意義明確,當你需要用到外部函數等資源時,就用include。而Python中有一個相似的機制,就是import。乍一看,這兩個傢伙挺像的,不都是我們要用外部資源(最常見的就是函數或者模塊(Python))時就用這個來指明么?其實不然,兩者的處理機制本質區別在於,C中的include是用於告訴預處理器,這個include指定的文件的內容,你都給我當作在本地源文件中出現過。而
import呢,不是簡單的將後面的內容*直接*插入到本地裡面去,這玩意更加靈活。事實上,幾乎所有類似的機制,Python都比C靈活。這里不是說C不好,C很簡練,我其實更喜歡C。
簡單說說這個靈活性。import在python中有三種形式,import X, from X import *( or a,b,c……), X =
__import__(『x』)。最常用的是第二種,因為比較方便,不像第一種那樣老是用X.mole來調用模塊。from X import
*只是import那些public的mole(一般都是不以__命名的模塊),也可以指定a,b,c來import。
什麼時候用哪一種形式呢?應該說,在大多數的模塊文檔里,都會明確告訴你應該用哪種形式。如果需要用到很多對象,那麼from X import
*可能更合適一些,但是,就目前來看,大多數第三方Python庫都不推薦使用from molename import *
這種格式。這樣做會使引入者的namespace混亂。很多人甚至對於那些專門設計用於這種模式的模塊(包括Tkinter,
threading和matplot)都不採用這種方式。而如果你僅僅需要某個對象類a,那麼用from X import a比用import
X.a更好,因為以後你調用a的函數直接用a.function()既可以了,不用加X。
如果你連自己希望import的模塊都不知道怎麼辦?請注意,此時Python的優勢就體現出來了,我們可以用
__import__(mole)來調用mole,其中這個mole是字元串,這樣,可以在運行時再決定,你到底要調用什麼mole。舉個例子:
def classFromMole (mole, Name):
mod = __import__ (mole)
return getattr (mod, Name)
這里,定義了一個函數classFromMole,你可以在代碼的任何時候調用它,
o = classFromMole (MoleOfTheClass, NameOfTheAttribute)()
只需要傳入字元串形式的你希望import的模塊MoleOfTheClass和其中屬性的名字NameOfTheAttribute(當然可以是數據也可以是方法),就能調用了,這個名字字元串不用事先指定,而是根據當時運行的情況來判斷。
順帶說一句,Python中import的順序也有默認規定,這個和C中的include有點類似,因為我們一般都是先include系統文件,再
include自己的頭文件(而且還有<>和「」的區別)。Python中呢,一般應該按照以下順序import模塊:
1. 標准庫模塊 — 如 sys, os, getopt 等
2. 第三方模塊
3. 本地實現的模塊。
全局變數
這里談全局變數呢,倒不是說Python和c的全局變數概念不同,他們的概念是相同的。只是在使用機制上,是有一些差異的。舉個例子:
– mole.py –
globalvar = 1
def func():
print globalvar
# This makes someglobal readonly,
# any attempt to write to someglobal
# would create a new local variable.
def func2():
global globalvar
globalvar = 2
# this allows you to manipulate the global
# variable
在 func這個函數中,globalvar是只讀的。如果你使用了globalvar =
xxx這種賦值語句,Python會重新創造一個新的本地對象並將新值賦給它,原來的對象值不變。而在func2函數中,由於我們事先申明了
globalvar是global的,那麼此時的更改就直接在全局變數上生效。
很明顯這和c中的使用機制是不一樣的,在c中,我們只要在函數外的全局區域申明了變數,就可以在函數中直接對其操作,不用還申明一個global。
Published 2008-06-22
Filed in c,code,python and
tagged c, python
『肆』 風變python課程怎麼樣有沒有學完的小夥伴來聊聊感想唄。
我現在就正在學風變python課程,我上完感覺還挺好的,是很有意思的一種編程課,以前真的沒想到編程還能用這種輕松有趣的方式來學習,我覺得接受起來不困難,完全能學懂。風變python課程的助教老師我感覺也挺好,沒有弄懂的地方,或者是課後遇到什麼問題,助教老師都會耐心地幫你解答。
『伍』 python編程的第一步感想是什麼
當然,我們可以使用 Python 完成比二加二更復雜的任務。例如,我們可以寫一個生成 菲波那契 子序列的程序,如下所示:
>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while b < 10:
... print(b)
... a, b = b, a+b
這個例子介紹了幾個新功能。
第一行包括了一個 多重賦值:變數 a 和 b 同時獲得了新的值 0 和 1 最後一行又使用了一次。
在這個演示中,變數賦值前,右邊首先完成計算。右邊的表達式從左到右計算。
條件(這里是 b < 10 )為 true 時, while 循環執行。在 Python 中,類似於 C,任何非零整數都是 true;0 是 false。條件也可以是字元串或列表,實際上可以是任何序列;
所有長度不為零的是 true,空序列是 false。示例中的測試是一個簡單的比較。標准比較操作符與 C 相同: < , > , == , <=, >= 和 !=。
循環 體 是 縮進 的:縮進是 Python 組織語句的方法。Python (還)不提供集成的行編輯功能,所以你要為每一個縮進行輸入 TAB 或空格。
實踐中建議你找個文本編輯來錄入復雜的 Python 程序,大多數文本編輯器提供自動縮進。互動式錄入復合語句時,必須在最後輸入一個空行來標識結束(因為解釋器沒辦法猜測你輸入的哪一行是最後一行),需要 注意的是同一個語句塊中的每一行必須縮進同樣數量的空白。
關鍵字 print() 語句輸出給定表達式的值。它控制多個表達式和字元串輸出為你想要字元串(就像我們在前面計算器的例子中那樣)。
字元串列印時不用引號包圍,每兩個子項之間插入空間,所以你可以把格式弄得很漂亮,像這樣:
『陸』 想找一份Python學習心得
你是想找什麼樣的學習心得呢,是畢業了還是想從中找些學習經驗呢,這個你可以去千鋒的技術論壇看一下。上面很多學員感言,學員故事啥的。並且還有技術教程和視頻資源,都可以的。
『柒』 學python和學C語言的感受有什麼不同
好吧。
1、python是個怪物。用了10年了,感覺它與其它語言不太一樣。所以C語言是必學的。 python語言有些特別。如果同時學可能混淆。 如果你時間不足夠,兩個同時學也沒有大問題。
2、不過最好還是先學習C語言。把它學成優秀,然後緊接著再學習python。
3、C語言學習並不會花多長時間。我曾經教一個沒有一點編程基礎的女生4天,最多一個星期就掌握C語言。並且能夠用C語言設計程序了。
4、當然要掌握好C語言還需要大背的記憶 ,以及練習。上機練習時間不少於30小時。
5、會了C後再學python會明顯容易。不過python太自由了。 如果你一開始學習python會覺著很容易,再學習C,就會覺著C好難。
6、如果你認真學習,我個人認為c語言甚至比python還要簡單。
『捌』 C語言R語言Python一起學是什麼感受
我試過Java,Python,go三門同時一起學,在學習演算法的時候都沒有太大的問題,在具體練習編碼的時候經常發生語法的混亂,個人建議還是一門一門的學習,同時學很容易造成語法的混亂
『玖』 讀《我為什麼從python轉向go》的一些感受
不懂Python不要亂噴啊。你直接說「我不懂Python,我也不願意維護前任寫的糟糕代碼,我Go牛B,所以我要重構一遍!」
我覺得go不錯,但是如果不是特定領域開發,沒有足夠多成熟穩定的庫仍然很麻煩的事情。
python雖然很強大,但我們在使用的時候也碰到了一些問題,主要由如下幾個方面:
動態語言
python是一門動態強類型語言。但是,仍然可能出現int + string這樣的運行時錯誤,因為對於一個變數,在寫代碼的時候,我們有時候很容易就忘記這個變數到底是啥類型的了(點評: 真的很少遇到, 每個函數的參數類型都有約定, 所以根本不會記不得)。
在python裡面,可以允許同名函數的出現,後一個函數會覆蓋前一個函數,有一次我們系統一個很嚴重的錯誤就是因為這個導致的。(點評:遇到過,不過這也是不遵循約定導致的,命名不規范的緣故,在不同模塊採用相同的名稱是可以的,另外這個問題在靜態語言里也有啊,你鏈接到一個錯誤的庫上。 在運行時用後一個函數會覆蓋前一個函數,這也正是monkey patch存在的基礎。雖然我覺得如果在語言層面上對用戶可以對變數的類型進行顯式聲明的約束很有用)
上面說到的這些,靜態語言在編譯的時候就能幫我們檢測出來,而不需要等到運行時出問題才知道。雖然我們有很完善的測試用例,但總有case遺漏的情況。所以每次出現運行時錯誤,我心裡都想著如果能在編譯的時候就發現該多好。(點評: 有了編譯時檢查運行時就不出錯了么? 難道代碼寫完了就完了么? 差不多每次添加功能或者調試的時候,讀到感覺寫的不好或者寫的不清楚的,都要做些清理,畢竟人對於所使用的庫或者語言的理解是逐步深入的。)
性能
其實這個一直是很多人吐槽python的地方,但python有它適合乾的事情,硬是要用python進行一些高性能模塊的開發,那也有點難為它了。
python的GIL導致無法真正的多線程,大家可能會說我用多進程不就完了。但如果一些計算需要涉及到多進程交互,進程之間的通訊開銷也是不得不考慮的。
無狀態的分布式處理使用多進程很方便,譬如處理http請求,我們就是在nginx後面掛載了200多個django server來處理http的,但這么多個進程自然導致整體機器負載偏高。
但即使我們使用了多個django進程來處理http請求,對於一些超大量請求,python仍然處理不過來。所以我們使用openresty,將高頻次的http請求使用lua來實現。可這樣又導致使用兩種開發語言,而且一些邏輯還得寫兩份不同的代碼。(點評:不用django,沒有發言權,不過高頻的請求可以用Cython優化,現在的Cython已經比2013年的時候方便多了。。。)
同步網路模型
django的網路是同步阻塞的,也就是說,如果我們需要訪問外部的一個服務,在等待結果返回這段時間,django不能處理任何其他的邏輯(當然,多線程的除外)。如果訪問外部服務需要很長時間,那就意味著我們的整個服務幾乎在很長一段時間完全不可用。
為了解決這個問題,我們只能不斷的多開django進程,同時需要保證所有服務都能快速的處理響應,但想想這其實是一件很不靠譜的事情。
非同步網路模型
tornado的網路模型是非同步的,這意味著它不會出現django那樣因為外部服務不可用導致這個服務無法響應的問題。話說,比起django,我可是非常喜歡tornado的,小巧簡單,以前還寫過幾篇深入剖析tornado的文章了。雖然tornado是非同步的,但是python的mysql庫都不支持非同步,這也就意味著如果我們在tornado裡面訪問資料庫,我們仍然可能面臨因為資料庫問題造成的整個服務不可用。(點評:歷史原因,幾乎所有Python的標准庫都是同步的,)
其實非同步模型最大的問題在於代碼邏輯的割裂,因為是事件觸發的,所以我們都是通過callback進行相關處理,於是代碼裡面就經常出現干一件事情,傳一個callback,然後callback裡面又傳callback的情況,這樣的結果就是整個代碼邏輯非常混亂。python沒有原生的協程支持,雖然可以通過gevent,greenlet這種的上patch方式來支持協程,但畢竟更改了python源碼。另外,python的yield也可以進行簡單的協程模擬,但畢竟不能跨堆棧,局限性很大,不知道3.x的版本有沒有改進。(點評: Python3.4引入asyncio,Python3.5引入的async和await,就算使用Twisted,也不會一堆callback啊。有沒有搞錯?不清楚跨堆棧)
開發運維部署
當我第一次使用python開發項目,我是沒成功安裝上項目需要的包的,光安裝成功mysql庫就弄了很久。後來,是一位同事將他整個python目錄打包給我用,我才能正常的將項目跑起來。話說,現在有了docker,是多麼讓人幸福的一件事情。(點評: 沒有用過虛擬Python環境?virtualenv,python直接調用mysql connector,怎麼會裝一堆庫?不明所以)
而部署python服務的時候,我們需要在伺服器上面安裝一堆的包,光是這一點就讓人很麻煩,雖然可以通過puppet,salt這些自動化工具解決部署問題,但相比而言,靜態編譯語言只用扔一個二進制文件,可就方便太多了。( 點評:測試環境就是開發環境,你確定靜態編譯的不解決好依賴在別的機子上面就能跑?)
代碼失控
python非常靈活簡單,寫c幾十行代碼才能搞定的功能,python一行代碼沒准就能解決。但是太簡單,反而導致很多同學無法對代碼進行深層次的思考,對整個架構進行細致的考量。來了一個需求,啪啪啪,鍵盤敲完開速實現,結果就是代碼越來越混亂,最終導致了整個項目代碼失控。
雖然這也有我們自身的原因,譬如沒好的代碼review機制,沒有好的項目規范,但個人感覺,如果一個程序員沒經過良好的編碼訓練,用python很容易就寫出爛的代碼,因為太自由了。
當然,我這里並不是說用python無法進行大型項目的開發,豆瓣,dropbox都是很好的例子,只是在我們項目中,我們的python代碼失控了。(點評:好像沒有聽說用了那種語言代碼就不失控了,這根本就是拒絕小步重構,代碼模塊化差,模塊耦合度高等等一系列問題導致的,Python的實現代碼少,反而能夠有精力進行持續的快速改進。。)
上面提到的都是我們在實際項目中使用python遇到的問題,雖然最終都解決了,但是讓我愈發的覺得,隨著項目復雜度的增大,流量性能壓力的增大,python並不是一個很好的選擇。
(點評: Python存在問題嗎? 當然也有很多,比如
* 配套的非同步庫太少且缺乏維護。
* 不能限制變數的類型(雖然有Python3.5的type hints,但是和注釋沒啥區別)
* 本身的計算性能比V8引擎的JavaScript要差很多(可以藉助C)
『拾』 風變編程python課學習後的效果怎麼樣,有沒有聽過課的朋友說說具體的感受
最近一直在學習風變編程,個人感覺學習的效果還是比較好的,雖然我沒有學習過編程,屬於毫無基礎的那一類人,但是聽完不少課程之後,沒有出乎意料的枯燥感,許多困難的語法都在老師的質量講述下化繁為簡,而且還有配屬助教,遇到不懂的問題,助教都會第一時間進行耐心解答,期待後續學習完成後的成效。