[英]Using lambdas in a function within a function
我有一個作業,要求我修改一些代碼。 原始功能是這樣的:
def selectivelyCopy(inputFile,outputFile,predicate):
linesCopied = 0
for line in inputFile:
if predicate(line):#test the line with the predicate
outputFile.write(line)
linesCopied+=1
inputFile.close()
return linesCopied
現在,我想添加參數transform ,該函數接受一個字符串作為其參數,並根據用戶指定的轉換返回一個字符串。 如果函數調用中省略了transform ,則輸入文件中的行將保持不變。
這是我到目前為止的內容:
def selectivelyCopy2(inputFile,outputFile,predicate, transform):
def transform(x = lambda x: x):
return(x)
linesCopied = 0
for line in inputFile:
if predicate(line): #test the line with the predicate
outputFile.write(line)
linesCopied+=1
inputFile.close()
return linesCopied
我不確定從這里繼續。 我想我應該讀取輸入文件行,但要編寫轉換后的行...或其他內容?
現在,我想添加參數transform,這是一個將字符串作為參數並根據用戶指定的轉換返回字符串的函數。 如果函數調用中省略了transform,則輸入文件中的行將保持不變。
在我看來,這很簡單:您應該接受一個稱為transform
的函數參數,如果提供了參數,則可以調用它。 如果未提供,則不調用它,否則調用一個瑣碎的函數以使其輸入保持不變。
我建議您對transform
使用默認參數None
。 然后檢查是否transform is None
。 如果不是,請嘗試調用它,傳遞當前行,並將輸出收集為新的當前行。 如果transform is None
則只需將當前行寫為不變。
另外,您可以聲明這個瑣碎的函數:
def nop(x):
return x
然后指定參數transform
的默認值為nop
函數。 哪個更好,可以測試“ None
並且什么None
調用,或者擁有合理的不操作默認功能並始終調用它? 我認為這主要是個人喜好問題。 對None
的測試避免了函數調用的開銷,因此它可能稍快一些,但無論哪種方式都沒什么大不了的。
沒有理由聲明一個名為transform
的私有函數,這樣做使您無法檢查參數transform
是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.