无法在另一个函数的For循环内调用函数

时间:2017-10-02 08:37:43

标签: python python-2.7 function for-loop

我在编写程序时遇到了一些麻烦,并且想知道是否有人可以提供帮助。到目前为止,这是我的代码:

>help
For more information on a specific command, type HELP command-name.
ASSOC          Displays or modifies file extension associations.
... 

该计划包括两个功能。您看到的第一个函数从文件列表中获取每个文件,查找句点,并返回其后面的内容,即扩展名。

第二个功能(主要功能)是我遇到麻烦的地方。第二个函数是假设在for循环中调用第一个函数来接收列表中所有文件的扩展,然后将所有返回的扩展名与第二个硬编码参数进行比较," py"或" fileExtension"在功能内。如果有" py"在列表中的文件中,该函数应返回true,否则返回false。

3 个答案:

答案 0 :(得分:1)

return退出该函数,它不会在return语句后继续执行该函数。

在列表中构建结果,然后在for循环结束后返回它们,或者使用yield一次一个地传回它们(但是你需要使用一个从结果中循环或构造list

def fileExtensionExists(fileList, fileExtension):
    extensions = []
    for fileName in fileList:
        extensions.append(parseExtension(fileList))
    return extensions

def fileExtensionExists(fileList, fileExtension):
    for fileName in fileList:
        yield parseExtension(fileList)

print(list(fileExtensionExists( ["python.exe", "assignment5.docx", 
    "assignment4.py", "shortcuts.docx", "geographyhw1.txt"], "py")))
顺便说一句,除非这是一个学校练习,请帮自己一个忙,并使用os.path.splitext()来拆分扩展,这里真的没有必要重新发明轮子,Python带有很多轮子。 splitext()将包含扩展程序前面的句点,因此您可以传入".py",但这通常可以使代码更清晰。

答案 1 :(得分:0)

你的for循环不执行任何操作:它会在列表fileExtensionExists的第一个元素退出后,在第一个符号return退出时返回

答案 2 :(得分:0)

首先,您需要在fileName函数调用中提供parseExtension。但是你还有一些问题。我想你想要的是这个。

def parseExtension(filename):
    periodPosition = filename.find(".")
    extension = (filename[periodPosition + 1:])
    return extension


def fileExtensionExists(fileList, fileExtension):
    for fileName in fileList:
        if parseExtension(fileName) == fileExtension:
            return True
    return False

my_files = ["python.exe", "assignment5.docx", "assignment4.py", 
            "shortcuts.docx", "geographyhw1.txt"]

print(fileExtensionExists(my_files, "py"))