gpt4 book ai didi

Python 最佳实践 : try except pass?

转载 作者:行者123 更新时间:2023-12-04 14:10:26 40 4
gpt4 key购买 nike

小问题,对我来说学习最佳实践比什么都重要。如果有更好的方法,请批评:)

基本上我有多个 GPIO 输入对应一个按钮按下。因此,例如,如果用户按下按钮 2,我会从引脚 5 和引脚 6 获得高值。

所以在我的代码中,我需要将高引脚映射到“按钮”id。

为此,我使用了一个二维列表,其中元素的索引将对应于按钮的“id”。

buttons = [
[],
[PIN_5],
[PIN_5, PIN_6],
[PIN_6],
[PIN_6, PIN_19],
...
]

我正在使用线程循环来检查引脚值,并将高状态引脚存储在新列表中。

因此,一旦按下一个按钮,一个新列表将包含哪些引脚为高电平。

pins_high = [PIN_5, PIN_6]

所以这就是我的最佳实践问题出现的地方,要将这些引脚映射到映射列表中的按钮“id”,我使用的是try except pass方法

button_pressed = 0
try:
button_pressed = buttons.index(pins_high)
except ValueError:
pass

这是最佳做法吗?在我看来,这是一个很好的简洁解决方案,但我是否忽略了像这样使用 try/except/pass 的任何可能的泄漏/影响?

干杯,杰米

最佳答案

使用 dict首先是效率更高(O(1) 的查找时间相对于 list.indexO(n) ), 并在 get() 的帮助下减少了对 try/except 的需求方法。 “问题” 是字典的键需要是可哈希的——而列表不是。因此,您需要将它们转换为元组(可散列):

buttons = {
(PIN_5,): 1,
(PIN_5, PIN_6): 2,
(PIN_6,): 3,
(PIN_6, PIN_19): 4
}

现在使用 get检查 key 的方法,如果未找到,它将返回第二个 default 参数:

button_pressed = buttons.get(tuple(pins_high), 0)

请注意,这是“顺序敏感” - 意味着 [PIN_6, PIN_5] 将返回 0 而不是 2 !

关于Python 最佳实践 : try except pass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64899210/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com