0

我有一个任务要求我修改一些代码。原来的功能是这样的:

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,一个将字符串作为参数的函数,并根据用户指定的转换返回一个字符串。如果函数调用中省略了转换,则输入文件中的行将保持不变。

这是我到目前为止所拥有的:

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

我不知道从哪里开始。我想我想读取输入文件行,但写转换后的行......还是什么?

4

1 回答 1

3

现在我想添加参数transform,一个函数,它的参数是一个字符串,并根据用户指定的转换返回一个字符串。如果函数调用中省略了转换,则输入文件中的行将保持不变。

这对我来说听起来很简单:你应该接受一个名为 的函数参数transform,如果提供了它,你就调用它。如果没有提供,您要么不调用它,要么调用一个简单的函数,该函数返回其输入不变。

我建议您使用Nonefor的默认参数transform。然后检查是否transform is None。如果不是,则尝试调用它,传递当前行,并将输出收集为新的当前行。如果transform is None那么您只需将当前行保持不变。

或者,您可以声明这个简单的函数:

def nop(x):
    return x

然后指定参数的默认值transform是函数nop。哪个更好,测试None和调用什么,或者有一个明智的无操作默认函数并总是调用它?我认为这主要是个人喜好问题。测试None避免了函数调用的开销,因此它可能会稍微快一些,但无论哪种方式都可能没什么大不了的。

没有理由声明一个名为 的私有函数transform,这样做会使您无法检查参数transform是什么。

于 2012-04-16T06:37:52.280 回答