新手问题-将功能分为两个

时间:2019-03-08 17:32:24

标签: python python-3.x

所以我是python的新手,我有一个函数需要分为两部分。以前,它是一个功能,但是在一个比我了解得多的人的建议下,我被提示我的功能做得太多,我需要将其分解为两部分:所以我在这里。

下面是分成两部分的代码。

我想知道我是否必须在两个函数中都提到name

这应该做的是检查文件是否存在,然后检查文件是否存在,然后运行第二个功能以删除实际目录。

pathlist

1 个答案:

答案 0 :(得分:3)


不完全是。如果要将整个路径列表传递到remove_directory,则将尝试删除每个路径列表(无论是否存在),从而使check_directory功能不再需要。我认为您的意思是在check_directory函数中仅将存在的路径传递给remove_directory:

def check_directory(pathslist):
    for path in pathslist:
        if os.path.exists(path) and os.path.isdir(path):
            remove_directory(path)

dirs_to_delete = [
    'C:\MyDirectoryPath1',
    'C:\MyDirectoryPath2',
    'C:\MyDirectoryPath3'

 ]


def remove_directory(path):
     shutil.rmtree(path)
     print(colored('Found ' + path + ' removing', 'green'))

您可能想尝试为编写的每个函数编写注释以描述其功能。第二个您使用单词“和”或其他动词,这暗示您最好将函数拆分为多个部分(这只是经验法则,不是绝对的)。此外,您还希望避免重复代码-如果在两个单独的函数中有相同的代码行,则这是您需要重新考虑设计的另一提示。

编辑:如评论所指出,您的编写方式意味着调用check_directory将删除该目录(如果存在)。期望有人会因为不想删除它的其他原因而打电话给check_directory似乎是合理的,并且最好让remove_directory打电话给check_directory而不是相反: / p>

    def check_directory(path):
         # returns true if path is an existing directory
         return os.path.exists(path) and os.path.isdir(path)

    def remove_directory(pathlist):
        for path in pathlist:
            if check_directory(path):
                shutil.rmtree(path)
                print(colored('Found ' + path + ' removing', 'green'))