我破解了一个可行的脚本,但是我试图找到一种更简洁的方法。
以最简单的形式,我有两个模块:定义和脚本。
'definitions'具有变量列表,如下所示:
arrayUnion
我的目标是设置raspberrypi GPIO输入,但是定义文件由其他人管理。因此,我无法更改这些input0 = 5
input1 = 6
input2 = 4
语法。
“脚本”是指这些变量,例如:
inputX
但是我想将我的脚本简化为以下内容:
import definitions
list = [1,2,3]
if len(list) > 1:
print(definitions.input0)
if len(list) > 2:
print(definitions.input1)
if len(list) > 3:
print(definitions.input2)
这会导致属性错误:“模块”没有属性“输入”。
我不确定如何用短语表达搜索问题,有没有办法迭代地引用“定义”中的变量?
答案 0 :(得分:0)
首先,请不要将您的数据分配给list
。它是list
类的名称,覆盖它只会引起混乱。
您的问题,
print(definitions.input[index])
不起作用,因为definitions.input
不是列表,并且实际上根本不存在。但是
print(getattr(definitions, "input"+str(index)))
只要"input"+str(index)
的计算结果为input0
或类似的值,就会起作用。
答案 1 :(得分:0)
这是做类似事情的一种方法(确切的目标尚不清楚):
#!/usr/bin/env python3
// script.py
import definitions
Sequence = [1,2,3]
def setup(sequence):
for key in sequence:
print(key, getattr(definitions, f'input{key - 1}', 'None'))
if __name__ == '__main__':
setup(Sequence)