正文

  本文有些零碎,總題來說,包括兩個問題:(1)可變對象(最常見的是list dict)被意外修改的問題,(2)對參數(parameter)的檢查問題。這兩個問題,本質都是因為動態(tài)語言(動態(tài)類型語言)的特性造成了,動態(tài)語言的好處就不細說了,本文是要討論因為動態(tài)--這種靈活性帶來的一些問題。

  什么是動態(tài)語言(Dynamic Programming language)呢,是相對于靜態(tài)語言而言,將很多靜態(tài)語言編譯(compilation)時期所做的事情推遲到運行時,在運行時修改代碼的行為,比如添加新的對象和函數,修改既有代碼的功能,改變類型。絕大多數動態(tài)語言都是動態(tài)類型(Dynamic Typed),所謂動態(tài)類型,是在運行時確定數據類型,變量使用之前不需要類型聲明,通常變量的類型是被賦值的那個值的類型。Python就是屬于典型的動態(tài)語言。

  動態(tài)語言的魅力在于讓開發(fā)人員更好的關注需要解決的問題本身,而不是冗雜的語言規(guī)范,也不用干啥都得寫個類。運行時改變代碼的行為也是非常有用,比如python的熱更新,可以做到不關服務器就替換代碼的邏輯,而靜態(tài)語言如C++就很難做到這一點。筆者使用得最多的就是C++和Python,C++中的一些復雜的點,比如模板(泛型編程)、設計模式(比如template method),在Python中使用起來非常自然。我也看到過有一些文章指出,設計模式往往是特定靜態(tài)語言的補丁 -- 為了彌補語言的缺陷或者限制。

  以筆者的知識水平,遠遠不足以評價動態(tài)語言與靜態(tài)語言的優(yōu)劣。本文也只是記錄在我使用Python這門動態(tài)語言的時候,由于語言的靈活性,由于動態(tài)類型,踩過的坑,一點思考,以及困惑。

  本文地址:http://www.cnblogs.com/xybaby/p/7208496.html

第一個問題:Mutable對象被誤改

回到頂部

  這個是在線上環(huán)境出現過的一個BUG

  事后說起來很簡單,服務端數據(放在dict里面的)被意外修改了,但查證的時候也花了許多時間,偽代碼如下:

1 def routine(dct):2     if high_propability:3         sub_routine_no_change_dct(dct)4     else:5         sub_routine_will_change_dct(dct)

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式