无缝处理可迭代和不可迭代

时间:2010-05-13 05:36:08

标签: python iterable

您能告诉我如何优化以下代码吗?

def f(y, list_or_elem):
  if getattr(list_or_elem, '__iter__'):
    y = max(y, *list_or_elem)
  else:
    y = max(y, list_or_elem)

2 个答案:

答案 0 :(得分:1)

所有人的最佳优化是避免将“列表或单个元素”作为参数的愚蠢。但是,如果你坚持,最好使用try / except来尽快删除异常,并确保它是可迭代的:

try: iter(list_or_elem)
except TypeError: iterable = [list_or_elem]
else: iterable = list_or_elem
y = max(y, *iterable)

答案 1 :(得分:0)

如果你愿意在你的代码中添加flatten函数(这是一个很好的here),它基本上可以列出一系列列表...并将它归结为一个列表,你可以做类似

的事情
y = max(flatten([y, list_or_elem]))