我有这个代码,它可以很容易地在终端上给一个字符串上色,但它看起来确实是重复的。有没有更有效地做到这一点的功能性方法?使用通用函数来做基于调用者的东西?
看起来真的很琐碎,像字符串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''序列。 –