访问方法中的局部变量?

2024-07-05 08:44:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的脚本打开一个文件(a.txt)并将其复制到一个新文件(b.txt)。如果新文件存在,它会索引名称(b1.txt),所以我不会覆盖现有的文件。现在我想在函数(method)之外为复制的文件(b#.txt)使用最新的名称?-抱歉,我是新来的)。你知道吗

这是我剧本的一部分。在复制原始文件后调用replaceAll方法替换某些文本时,我希望使用newFile的当前值。你知道吗


class classMain:

    def copyFile(self,origFile,newFile):
        fIn = open(origFile,'r')
        i = 0
        while os.path.exists(newFile):
            i += 1
        newFile = 'b'+str(i)+'.txt'
        fOut = open(newFile,'w')

        for line in fIn:
            fOut.writelines(line)

        fIn.close()
        fOut.close()

    def replaceAll(self,file,searchExp,replaceExp):
        for line in self.fIn(file, inplace=1):
            if searchExp in line:
                line = line.replace(searchExp,replaceExp)
            sys.stdout.write(line)

谢谢!你知道吗


Tags: 文件inselftxt名称fordefline
3条回答

由于您不知道函数将要创建哪个文件,请通过返回一个值来告诉您:

return newFile

return将立即结束它所在的函数的执行,因此相应地放置它。在您的例子中,它应该是copyFile()的最后一行。使用copyFile()时,通过将其赋给变量来捕获它返回的值:

savedin = classMain.copyFile(oldname, newname)

如果您不想保存返回值,只需像以前一样调用copyFile,返回值将被讨论。你知道吗

其他一些答案建议设置一个全局变量。这在某些方面可能是正确的,但这是一个“副作用”,因为它在调用函数的代码中不可见。保持它的简单性并返回值,直到出现无法用这种方法解决的问题为止。你知道吗

您可以:1)使用全局变量存储newFile变量的最终值。 2) 返回newFile变量的值,然后将其作为参数传递给replaceAll函数

你提到这是在class classMain。虽然这不是解决问题的最佳encapsulation,但您可以通过将变量newFile写回成员变量来共享它,如下所示:

class classMain:

    newFile = None
    # ... the rest of your code here.

然后可以通过在类方法中将成员变量作为self.newFile写入并从中读取来引用它。但是,作为Kaustubh mentioned,还有其他方法可以解决这个问题。This documentation也可以帮助你。你知道吗

欢迎来到StackOverflow!祝你好运。你知道吗

相关问题 更多 >