正文
本文有些零碎,總題來說,包括兩個問題:(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)
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26