我有一项任务,要求我修改一些代码。原来的功能是:
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
我不知道从哪里开始。我想我想读取输入文件行,但写下转换后的行...或者什么?
答案 0 :(得分:3)
现在我想添加参数transform,一个以字符串形式作为参数的函数,并根据用户指定的转换返回一个字符串。如果函数调用中省略了transform,则输入文件中的行将保持不变。
这听起来很简单:你应该接受一个名为transform
的函数参数,如果它被提供,你就可以调用它。如果没有提供,你要么不要调用它,否则你调用一个简单的函数来返回它的输入。
我建议您为None
使用transform
的默认参数。然后检查是否transform is None
。如果不是,则尝试调用它,传递当前行,并将输出收集为新的当前行。如果transform is None
那么你只需要保持当前行不变。
或者,您可以声明这个简单的函数:
def nop(x):
return x
然后指定参数transform
的默认值是函数nop
。哪个更好,测试None
并且不调用任何东西,或者有一个明智的无操作默认函数并且总是调用它?我认为这主要取决于个人偏好。对None
的测试避免了函数调用的开销,所以它可能稍微快一点,但无论如何它可能都不是什么大问题。
没有理由声明一个名为transform
的私有函数,通过这样做,你无法检查参数transform
是什么。