你能告訴我如何優化下面的代碼嗎?無縫處理迭代和非迭代
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