使用变量

时间:2016-03-27 13:57:12

标签: python tuples concatenation

我有一个元组x = (2,),我想在其中添加一个变量y。我事先并不知道究竟会有什么样的变量y

y可能是:

  • 一个元组,在这种情况下,我很高兴使用x+y
  • 单个对象(通常是字符串或整数),在这种情况下,我应该使用x+(y,)

采用一种策略会在一半时间内给我一个TypeError,而当我想要(2, (3, 4))时,采用另一种策略会给我(2, 3, 4)

处理此问题的最佳方式是什么?

2 个答案:

答案 0 :(得分:4)

使用第二种策略,只需检查您是否添加了包含多个项目或单个项目的可迭代项。

通过检查是否存在tuple属性,您可以查看对象是否是可迭代的(list__iter__等)。例如:

# Checks whether the object is iterable, like a tuple or list, but not a string.
if hasattr(y, "__iter__"):
    x += tuple(y)
# Otherwise, it must be a "single object" as you describe it.
else:
    x += (y,)

试试这个。此代码段的行为与您在问题中描述的完全相同。

请注意,在Python 3中,字符串具有__iter__方法。在Python 2.7中:

>>> hasattr("abc", "__iter__")
False

在Python 3 +中:

>>> hasattr("abc","__iter__")
True

如果您使用的是Python 3,在您的问题中没有提到,请将hasattr(y, "__iter__")替换为hasattr(y, "__iter__") and not isinstance(y, str)。这仍然会考虑元组或列表。

答案 1 :(得分:1)

if条件下使用isinstance

>>> x = (2,)
>>> y1 = (1,2)
>>> y2 = 2
>>> def concat_tups(x,y):
...     return x + (y if isinstance(y,tuple) else (y,))
... 
>>> concat_tups(x,y2)
(2, 2)
>>> concat_tups(x,y1)
(2, 1, 2)
>>>