Python 不是 Java (提高python運行效率的一些編程規範)

來源:互聯網
上載者:User
原文請參見http://dirtsimple.org/2004/12/python-is-not-java.html 

Python is not Java下面簡單記錄其中作者提到的一些觀點1.不要將java中的靜態函數 static method,轉換為python中的類方法(注,類中定義的不帶self參數的方法).   儘管作用相同,但是python中的類方法是用來做一些java中不能或者不好實現的效果(例如繼承非預設的建構函式)      好的方案是將java中的 static method在pthon中實現為module-level function(注,模組層級的全域函數,right?)   java 中的 static final 變數,應該被轉換為python中的module-levle constants(模組層級的常量)       這樣做的好處是不需要輸入麻煩的Foo.Foo.someMethod而是Foo.someMethod,調用一個class method 會帶來而外的記憶體開銷。   (注,個人認為在非純OO(java純OO,c/c++,python不是)的語言中,有時候完全可以用函數而不用類,類的作用在於對象所有的函數      可以擁有共用的資料變數,如果不需要對象級的變數那麼對於c++用namesapce 機制 採用函數,和python中利用moudle機制採用函數      是完全可以的)         另外,要注意到 Foo.Foo.someMethod中的.是有代價的,比Foo.someMethod要慢,這是因為對於java對於每個.這些名字是在編譯器尋找的,    而對於python這種動態語言它是在運行期尋找的,所以要付出時間代價的。2. 需要用到swith 語句? python中的做法是用字典dict(hash table)3.XML不是答案(注,這個我還不太懂,看原文吧)4. 不要用getters 和 setters (注,getter如c++   inline int getNum() const { return num} )    作者認為不僅浪費cpu時間也浪費程式員時間,具體理由沒太看懂:)5. 去除程式冗餘。    作者提到用閉包去除冗餘,但他沒有具體給出代碼例子,具體怎麼去除沒太看懂:)    關於閉包google了一下,下面給個例子    看一下《 Python 核心編程》對 閉包的解釋。

如果在一個內建函式裡,對在外部範圍(但不是在全域範圍)的變數進行引用,那麼內建函式就被定義為閉包 。定義在外部函數內的但由內建函式引用或者使用的變數被稱為自由變數 。

下面程式運行結果 

1

2

1

2

個人感覺閉包能使函數帶有非全域的(但是類全域的變數,nonlocal)一個類似c++ static變數的感覺,其實用類對象通過物件變數完全可以類比,不過這裡就完全是函數式編程了。

 1 def counter(start_at = 0):     
 2     count = [start_at]     
 3     def incr():     
 4         count[0] += 1    
 5         return count[0]     
 6     return incr   
 7 
 8 def counter2(s = 0):
 9     count = s
10     def incr():
11         nonlocal count
12         count += 1
13         return count
14     return incr
15 
16 count = counter()
17 
18 print(count())
19 
20 print(count())
21 
22 
23 count  = counter2()
24 print(count())
25 
26 print(count())

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.