你能告诉我如何优化下面的代码吗?无缝处理迭代和非迭代
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)
你能告诉我如何优化下面的代码吗?无缝处理迭代和非迭代
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)
所有的最佳优化将避免像“无论是列表还是单个元素”作为参数这样的愚蠢。但是,如果你坚持,这是更好地使用try /除了尽快移除异常和做什么肯定是一个迭代:
try: iter(list_or_elem)
except TypeError: iterable = [list_or_elem]
else: iterable = list_or_elem
y = max(y, *iterable)
在这里类似的回答: http://stackoverflow.com/questions/1952464/in-python-how-do-i-determine-if-a-variable-is-iterable – 2010-05-13 05:46:25
如果你愿意在你的代码添加扁平化功能(那里有一好一个here),它可以基本上采取的名单列表的列表...并把它归结为一个单独的列表,你可以这样做
y = max(flatten([y, list_or_elem]))
ps:如果你这样做,添加使用该页面上指定的iter_flatten方法 – 2010-05-13 05:54:47
不要忘了字符串是可迭代的太多,所以' f(“xxx”,“abz”)'会返回“z”,这可能不是你想要的。 – 2010-05-13 06:07:59
再次想到你的函数不会返回任何东西 - 它将结果赋给y,这对函数来说是本地的。它不会做任何事情,无论你通过它的论点。 – 2010-05-13 06:09:42