摘要:的自帶函數提供了一個非常有趣的特性,可以將給一個字符串當做一個表達式去執行。例如這種服務器自助運維的運維任務中的定義和判斷
Python的自帶函數 eval 提供了一個非常有趣的特性,可以將給一個字符串當做一個表達式去執行。先上一個例子:
cond = compile("succ_rate<99","","eval") succ_rate = 100 print(eval(cond))
上面這段代碼執行結果是 True
表達式執行所需的參數如果不想硬編碼,也可以通過一個字典傳遞進去:
cond = compile("succ_rate<99","","eval") data={"succ_rate":100} print(eval(cond,data))
看到這里大家可能會有疑問,這種“奇技淫巧”到底有什么用,表達式都是靜態代碼直接正常寫不就行了么?實際上在大型的系統中經常會有“配置中心”之類的模塊,這種模塊通常是為了能夠在代碼不需要上線的情況下提供動態改變一些判斷邏輯的功能,邏輯簡單并且改動頻繁的業務判斷可以通過這種動態的方式來進行實現。
例如一個功能的上線以后需要篩選一部分手機設備進行逐步開啟功能開關,第一批可能會提供一批設備的機型列表進行開啟,隨后過幾天會在這個基礎上增加操作系統版本號的判斷,再過一段時間以后會去掉機型的限制轉而根據CPU型號進行判斷等等。對于這種純體力活,我們可以將表達式存儲在數據庫中,需要判斷的時候準備好參數 eval 一下即可,達到不需要上線代碼就能完成需求的目的,甚至還可以將權限下放給產品同學自行控制。
另外一個非常適合的應用場景是可以用來實現簡單的規則引擎,規則引擎的判斷邏輯可以完全用python的表達式進行書寫,可讀性會比自己創建一種描述規則好很多,也能降低學習成本。例如這種服務器自助運維的運維任務中 criteria 的定義和判斷:
criteria: succ_rate<99 and succ_rate>50 action: "service xxx restart"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44584.html
摘要:無論你使用的是解釋型語言還是編譯型語言,都有一個共同的部分將源代碼作為純文本解析為抽象語法樹的數據結構。和抽象語法樹相對的是具體語法樹,通常稱作分析樹。這是引入字節碼緩存的原因。 這是專門探索 JavaScript 及其所構建的組件的系列文章的第 14 篇。 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 如果你錯過了前面的章節,可以在這里找到它們: JavaS...
摘要:里,有兩種方法獲得一定范圍內的數字返回一個列表,還有返回一個迭代器。在引用計數的基礎上,還可以通過標記清除解決容器對象可能產生的循環引用的問題。列舉常見的內置函數的作用,過濾函數,循環函數累積函數一行代碼實現乘法表。 showImg(https://segmentfault.com/img/remote/1460000019294205); 1、為什么學習Python? 人生苦短?人間...
摘要:上個月,學習群里的同學問了個題目,大意可理解為列表降維,例子如下想得到結果原始數據是一個二維列表,目的是獲取該列表中所有元素的具體值。不經意間,函數的注意事項,竟把其它的進階內容都聯系起來了。小小的函數,竟成為學習之路上的一個樞紐。 上個月,學習群里的 S 同學問了個題目,大意可理解為列表降維 ,例子如下: oldlist = [[1, 2, 3], [4, 5]] # 想得到結果:...
閱讀 3735·2021-11-24 10:46
閱讀 1706·2021-11-15 11:38
閱讀 3761·2021-11-15 11:37
閱讀 3481·2021-10-27 14:19
閱讀 1939·2021-09-03 10:36
閱讀 1991·2021-08-16 11:02
閱讀 2998·2019-08-30 15:55
閱讀 2251·2019-08-30 15:44