我有這個代碼,它可以很容易地在終端上給一個字符串上色,但它看起來確實是重複的。有沒有更有效地做到這一點的功能性方法?使用通用函數來做基於調用者的東西?
看起來真的很瑣碎,像字符串blue
,red
等應該指向一個泛型函數,當你調用它時,你應該得到輸出取決於調用者的名字!
但顯然這樣的事情不存在,除非我稱之爲爭論。但後來我失去了編寫blue(bold(italics("Foo")))
的靈活性,這實際上是最終用戶持續不斷的做法。
我可以在內存中使用單個函數對象並更有效地執行此操作嗎?
bcolors = {"BLUE": '\033[94m',
"HIGH": '\033[93m',
"OKAY": '\033[92m',
"FAIL": '\033[91m',
"BOLD": '\033[1m',
"LINE": '\033[4m',
"ENDC": '\033[0m'
}
def blue(string):
return bcolors["BLUE"] + string + bcolors["ENDC"]
def yellow(string):
return bcolors["HIGH"] + string + bcolors["ENDC"]
def green(string):
return bcolors["OKAY"] + string + bcolors["ENDC"]
def red(string):
return bcolors["FAIL"] + string + bcolors["ENDC"]
def bold(string):
return bcolors["BOLD"] + string + bcolors["ENDC"]
def line(string):
return bcolors["LINE"] + string + bcolors["ENDC"]
函數不應該根據* who *調用它的行爲來改變它的行爲;只有它的論據應該影響它的行爲,其他任何事情都是瘋狂的。 – deceze
是的,純粹的函數式編程,我同意。所以基本上沒有解決這個問題比創建這麼多的函數對象?我只是想重申一下。 – Nishant
我不知道你爲什麼喜歡藍色(粗體(斜體(「Foo」)))''。我更喜歡'style(「Foo」,BLUE,BOLD,ITALICS)',其中樣式參數都是可選的,並且可以按任意順序給出。另外,我的方法可以更容易地消除多餘的''\ 033 [0m''序列。 –