下面的代碼工作,但看起來非常醜陋。我正在尋找更多pythonic的方式來寫同樣的事情。更好/更pythonic的方式來處理多個返回值的函數的結果
目標: 對返回多個值的函數的結果進行響應。
實例功能
def myfilterfunc(mystr):
if 'la' in mystr:
return True, mystr
return False, None
返回true和一個字符串(如果字符串cointains 「LA」),或假而已。
在第二個功能,我路過myfilterfunc作爲可選參數
def mymainfunc(mystr,filterfunc=None):
此功能填補了returnlist。 如果沒有給出函數,則結果不會被過濾並按原樣添加。 如果給出了過濾器函數,如果過濾器函數返回 True,則會添加返回的字符串。 (這只是一個例子,將 輕鬆地與一個返回值的工作,但我試圖讓systax 適合更復雜的設置)
if filterfunc:
tmp_status,tmp_string = filterfunc(mystr[startpos:nextitem])
if tmp_status:
returnlist.append(tmp_string)
else:
returnlist.append(mystr[startpos:nextitem])
任何想法,我怎麼可以這樣寫,而無需使用臨時變量來存儲函數的返回值?
完全 「工作」 的測試代碼如下
def string2list(mystr,splitlist,filterfunc=None):
returnlist = []
startpos = 0
nextitem = -1
matched = True
while matched:
matched = False
for sub in splitlist:
if startpos == 0:
tmpi = mystr.find(sub)
else:
tmpi = mystr.find(sub,startpos + 1)
if (tmpi > 0) and ((nextitem < 0) or (nextitem > tmpi)):
nextitem = tmpi
matched = True
if filterfunc:
tmp_status,tmp_string = filterfunc(mystr[startpos:nextitem])
if tmp_status:
returnlist.append(tmp_string)
else:
returnlist.append(mystr[startpos:nextitem])
startpos = nextitem
nextitem = -1
return returnlist
def myfilterfunc(mystr):
if 'la' in mystr:
return True,mystr
return False,''
splitlist = ['li','la']
mytext = '''
li1
li2
li3
fg4
fg5
fg6
la7
la
la
tz
tz
tzt
tz
end
'''
print string2list(mytext,splitlist)
print
print string2list(mytext,splitlist,myfilterfunc)
爲什麼你不只是返回字符串或'None'? – jonrsharpe
這是一個非常簡單的編程示例,我試圖找出如何處理兩個返回值,而不是以後要做的非常複雜的事情...... – 576i
然後請給出一個更具代表性的示例,請參見[mcve]。 – jonrsharpe