0

我正在尝试解析表单的元组:

a=(1,2)

或者

b=((1,2), (3,4)...)

对于 a 的情况,代码将是:

x, y = a

和 b 将是:

for element in b:
    x, y = element

有没有一种快速而干净的方式来接受这两种形式?这是在 MIDI 接收回调中(x 是指向要运行的函数的指针,y 是要传递给灯光的强度数据)。

4

2 回答 2

2
# 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):
    # ...
于 2012-08-19T04:17:29.287 回答
1

正确的方法是:

a = ((1,2),) # note the difference
b = ((1,2), (3,4), ...)

for pointer, intensity in a:
   pass # here you do what you want
于 2012-08-19T04:17:10.970 回答