我正在尝试解析格式的元组:
a=(1,2)
或
b=((1,2), (3,4)...)
对于一个案例,代码将是:
x, y = a
和b将是:
for element in b:
x, y = element
是否有一种快速而干净的方式来接受这两种形式?这是一个MIDI接收回调 (x是指向要运行的函数的指针,y是要传递给灯光的强度数据)。
答案 0 :(得分:1)
正确的方法是:
a = ((1,2),) # note the difference
b = ((1,2), (3,4), ...)
for pointer, intensity in a:
pass # here you do what you want
答案 1 :(得分:1)
# 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):
# ...