Python 2.7 如何消除python init函数中的以下代码重复

Python 2.7 如何消除python init函数中的以下代码重复,python-2.7,Python 2.7,我是编程新手。我在一个类中创建了以下函数。我注意到我在重复我的代码。我正在寻找消除这种重复的最佳解决方案 我在班上有以下功能: def init(自): 如果不存在os.path.exists(self.src_标志): 如果os.path.exists(self.src): removeFolder(self.src) 打印“文件{0}不存在”。格式(self.src_标志) 打开(self.src_标志'a')。关闭() 如果操作系统路径不存在(self.dst_标志): 如果os.path

我是编程新手。我在一个类中创建了以下函数。我注意到我在重复我的代码。我正在寻找消除这种重复的最佳解决方案

我在班上有以下功能:

def init(自):
如果不存在os.path.exists(self.src_标志):
如果os.path.exists(self.src):
removeFolder(self.src)
打印“文件{0}不存在”。格式(self.src_标志)
打开(self.src_标志'a')。关闭()
如果操作系统路径不存在(self.dst_标志):
如果os.path.exists(self.dst):
removeFolder(self.dst)
打印“文件{0}不存在”。格式(self.dst_标志)
打开(self.dst_标志'a')。关闭()
然后我通过调用这个函数

Folder.init()
不确定这是否是最好的方法,但我正在考虑将函数更改为以下内容:

def init(自身、标志、路径):
如果操作系统路径不存在(标志):
如果os.path.存在(路径):
移除文件夹(路径)
打印“文件{0}不存在”。格式(标志)
打开(标记“a”)。关闭()
但是我必须运行函数两次,以便为src和dst执行它

Folder.init('C:\src\flag.txt','C:\src')
Folder.init('C:\dst\flag.txt','C:\dst')

有人能告诉我我的解决方案是否可行,或者有更好的方法吗?

您可以使用数组作为参数,并在函数中循环这个[src,dst]数组。因此,您可以在方法中构建路径,只需交换路径中的src/dst部分

只有当src和dest始终一起初始化时,这才有意义。您可以去掉2个类似的方法调用或4个参数,以防在一个方法调用中使用füll路径


如果不是这样,我喜欢您的解决方案和两个调用。

当您执行完全相同的代码块时,显然应该使用循环。唯一的问题是如何获得论据,你可以通过几种方式选择最适合你的论据:

  • 只需传递两个列表:一个用于路径,另一个用于相应的标志。现在,您可以使用以下方法对其进行迭代:

    你可以这样称呼它:

    Folder.init(['C:\src\flag.txt','C:\dst\flag.txt',['C:\src','C:\dst'])

  • 或者,传递已配对的
    标志
    s和
    路径
    s的列表:

    def init(self, pairs):
        for flag, path in pairs:
            # your block with flag and path
    
    你可以这样称呼它:

    Folder.init([('C:\src\flag.txt','C:\src'),('C:\dst\flag.txt','C:\dst')))

  • 只要将所有参数一起传递,假设它们是成对排列的。然后,在对上迭代:

    def init(self, *args):
        for i in range(0, len(args)-1, 2):
            flag = args[i]
            path = args[i+1]
            # your block with flag and path
    
    或者,再次使用
    zip

    for flag, path in zip(args[::2], args[1::2]):
        # your block with flag and path
    
    您可以这样称呼它:
    Folder.init('C:\src\flag.txt','C:\src','C:\dst\flag.txt','C:\dst')

  • 最后,您在问题中没有提到这一点,但假设
    path
    是文件
    flag
    的目录,您可以使用该模块,只需通过以下函数传递标志并获取
    path

    def init(self, *flags):
        for flag in flags:
            path = os.path.dirname(flag)
            # your block with flag and path
    
    您可以这样称呼它:
    Folder.init('C:\src\flag.txt','C:\dst\flag.txt')

  • def init(self, *flags):
        for flag in flags:
            path = os.path.dirname(flag)
            # your block with flag and path