我正在尝试解析表单的元组:
a=(1,2)
或者
b=((1,2), (3,4)...)
对于 a 的情况,代码将是:
x, y = a
和 b 将是:
for element in b:
x, y = element
有没有一种快速而干净的方式来接受这两种形式?这是在 MIDI 接收回调中(x 是指向要运行的函数的指针,y 是要传递给灯光的强度数据)。
# If your input is in in_seq...
if hasattr(in_seq[0], "__iter__"):
# b case
else:
# a case
这基本上检查输入序列的第一个元素是否是可迭代的。如果是,那么这是您的第二种情况(因为元组是可迭代的),如果不是,那么这是您的第一种情况。
如果您确定输入将是元组,那么您可以改用它:
if isinstance(in_seq[0], tuple):
# b case
else:
# a case
根据您想要做什么,您对“a”情况的处理可能很简单,就像将单个元组捆绑在一个更大的元组中,然后在其上调用与“b”情况相同的代码,例如..
b_case = (a_case,)
编辑:正如评论中指出的,更好的版本可能是......
from collections import Iterable
if isinstance(in_seq[0], Iterable):
# ...
正确的方法是:
a = ((1,2),) # note the difference
b = ((1,2), (3,4), ...)
for pointer, intensity in a:
pass # here you do what you want