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