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