【发布时间】:2014-08-26 12:46:50
【问题描述】:
我正在编写一个可以接收标量 或 列表项的方法。我想要在该方法中做的第一件事是确保我正在使用列表。我想知道这样做的最pythonic方式。目前我正在做:
def print_item_or_list(list_or_item):
if not isinstance(list_or_item, (list, tuple)):
list_or_item = [list_or_item]
# Now I can consistently work with an iterable
for item in list_or_item:
print item
还有更惯用的方式吗?
谢谢!
【问题讨论】:
-
您可以使用
iter()函数,如果它不可迭代,则抛出TypeError。 -
通常的反对意见是字符串是可迭代的,所以调用
iter()并不能区分它们。确实没有“Pythonic”的方式来做到这一点,因为它是一个糟糕的 API。 -
@gipi - 列表也是可迭代的,这不是他要寻找的 IMO。
-
为什么不只传递参数列表:def print_item_or_list(*arg)
-
@PadraicCunningham:
isinstance("foo", collections.Iterable) == True