python - 有没有更好的方法来编写这些 if 语句
问题描述
本质上,当一个对象经过它时,这些 if 语句会迅速改变 cv2 线的颜色,问题是有 4 条线,我想在颜色变为绿色之前和之后保持这些线为红色。
这不仅看起来很糟糕,而且可能效率不高
if counter is 1:
cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_green, line_size)
cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
lct1 += 1
if counter is 2:
cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_green, line_size)
cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
lct2 += 1
if counter is 3:
cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_green, line_size)
cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
lct3 += 1
if counter is 4:
cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_green, line_size)
lct4 += 1
if counter is 0:
cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
解决方案
扩展我的评论。这里有一些东西可以快速说明如何为此使用函数。这可能不是唯一的方法,并且可能有更好的方法,但您可以从这样的方法开始。
def set_line_colour(counter):
line_colours = [line_col_red] * 4 #makes a list of 4 "Reds"
if counter != 0: #or more simply, if counter: (because 0 is "falsey")
line_colours[counter - 1] = line_col_green #sets one of the "Reds" to green instead.
cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_colours[0], line_size)
cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_colours[1], line_size)
cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_colours[2], line_size)
cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_colours[3], line_size)
可能对您有所帮助的一般经验法则:如果您在编写代码时发现自己复制粘贴行,请停下来考虑是否可以将其变成函数。
另外,旁注:==
用于与整数进行比较,而不是is
.
免责声明:此代码未经测试,请在使用前验证并根据需要进行更改。
推荐阅读
- jenkins - 如何在 Jenkins 中使用 kubernetes 插件显示带有节点 IP 地址的 pod 名称
- ios - 在IOS(14+)设备上部署Flutter App(发布)没有互联网连接
- javascript - 有没有办法专门使用多维数组中的第二个值来进行计算
- javascript - for循环不执行js中的所有循环
- javascript - Rails 6 Actioncable 用户正在输入
- java - 将 XAMPP 控制面板包装到我的 java 应用程序中
- node.js - 在服务器创建文件以供下载时让客户端挂起
- apache-kafka - 当 KStream 拓扑中的自定义类中发生错误时,消费者偏移量会发生什么情况?
- node.js - JWT 解密加密令牌
- python - 重复数据删除库、阻塞问题、缺少匹配项