是否有更好的方法让函数根据传递给它的值来输出颜色名称?可以替换下面的if else
算法。
此外,理想情况下,颜色将来自标准颜色图,而不必在if else
语句中手动编写每个颜色名称。
谢谢
def color_from_value(val):
if val <= 1:
return 'red'
elif val < 2:
return 'blue'
elif val < 3:
return 'green'
.
.
.
else:
return 'black'
答案 0 :(得分:1)
在您的情况下,一个简单的字典就足够了:
options = {1: 'red',
2: 'blue',
3: 'green'}
options[1]
# output: 'red'
您可以通过将函数与字典的每个元素相关联来泛化此方法:
def do_red():
return 'red'
def do_blue():
return 'blue'
def do_green():
return 'green'
# map the inputs to the function blocks
options = {1: do_red,
2: do_blue,
3: do_green}
options[1]()
# output: 'red'
注意:如果要在字典中不存在该键时使用默认值,则可以通过以下方式访问它:
options.get(key, 'black') # or options.get(key, lambda: 'black')()
如果key
不是options
键,则返回'black'
。
答案 1 :(得分:1)
您可以使用一个简单的列表,这对于迭代例如matplotlib / pyplot行。 (但是,这不会处理您的范围/限制。)例如:
colors = ['red','blue','green','black']
i=0
chosen_color = colors[i] # red
例如,您可以将其设为lambda以便处理默认情况(从health_check_type
借用):
color_from_value = lambda i: colors[i] if i < len(colors) else 'black'
assert(color_from_value(0) == 'red')
对于matplotlib,假设您要绘制两个不同的数据集:
import numpy as np
import matplotlib.pyplot as plt
colors = ['r','b','g','k']
x = np.linspace(0.0,1.0,11)
y = [2.0*x,x**2 + 1.0]
labels = ['linear','quadratic']
然后:
for i in range(2):
plt.plot(x,y[i],color=colors[i],label=labels[i])
_=plt.legend()
plt.show()
答案 2 :(得分:0)
您可以改用词典吗?:
mapping = {1: 'red',
2: 'blue',
3: 'green'}
mapping.get(value, 'black') # 'black' is default in case requested key is not in mapping
答案 3 :(得分:0)
您可以创建一个名为color.property
的文件。
该文件的内容将如下所示:
[color]
1=red
2=blue
3=green
...
然后输入代码:
import ConfigParser
import math
config = ConfigParser.RawConfigParser()
config.read('color.property')
def color_from_value(val):
//using floor to get integer. like 2.98->2
return config.get('color', math.floor(val))
没有if-else。 :)