我是编程新手。我在一个类中创建了以下函数。我注意到我在重复我的代码。我正在寻找消除这种重复的最佳解决方案。
我的类(class)有以下功能:
def init(self):
if not os.path.exists(self.src_flag):
if os.path.exists(self.src):
removeFolder(self.src)
print 'File {0} does not exist'.format(self.src_flag)
open(self.src_flag, 'a').close()
if not os.path.exists(self.dst_flag):
if os.path.exists(self.dst):
removeFolder(self.dst)
print 'File {0} does not exist'.format(self.dst_flag)
open(self.dst_flag, 'a').close()
然后我调用这个函数
Folder.init()
不确定这是否是最好的方法,但我正在考虑将函数更改为以下内容:
def init(self, flag, path):
if not os.path.exists(flag):
if os.path.exists(path):
removeFolder(path)
print 'File {0} does not exist'.format(flag)
open(flag, 'a').close()
但是我必须运行函数两次才能为 src 和 dst 执行它,例如
Folder.init('C:\src\flag.txt', 'C:\src')
Folder.init('C:\dst\flag.txt', 'C:\dst')
谁能告诉我我的解决方案是否可行,或者是否有更好的方法?
请您参考如下方法:
当您执行完全相同的代码块时,您显然应该使用循环。唯一的问题是如何获取参数,您可以通过几种方式做到这一点并选择最适合您的方式:
只需传递 2 个列表:一个用于路径,一个用于相应的标志。现在您可以使用
zip
遍历它们:def init(self, flags, paths): for flag, path in zip(flags, paths): # your block with flag and path
你可以这样调用它:
Folder.init(['C:\src\flag.txt', 'C:\dst\flag.txt'], ['C:\src', 'C:\dst'])
或者,传递已配对的
flag
和path
的列表: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
的目录,您可以使用os.path
模块,只需传递标志并使用dirname
获取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')