繁体   English   中英

我在 python 中有一个方法/函数,我试图在其中获取一个返回值,然后我可以将其用作另一个函数中的变量

[英]I have a method / function in python in which i'm trying to get a return value which i can then use as a variable in another function

所以我正在尝试学习 Python,同时编写一些代码来帮助自己完成一些平凡的任务。 所以我有一个函数,如果我使用打印语句来显示我需要的内容,它就可以正常工作,但是当我将“打印”语句替换为“返回”时,我只得到列表中的第一个元素,我知道它是因为“返回”导致函数退出,但我不知道如何让它返回其余元素。 我已经尝试了很多东西,现在已经阅读了几个小时:(但仍然没有进一步。目标:读取目录中的所有“*.common”文件,然后将它们与包含一些名称的文本文件进行比较,如果它们match 返回 *.common 文件的名称,因此我可以在另一个函数中将它用作变量。到目前为止我拥有的代码

# This method gets the list of common files....
def get_common_files():
    path = (config_home)
    files = []

    for r, d, f in os.walk(path):
        for file in f:
            if '.common' in file:
                files.append(file)

    for f in files:
        return files

new_file = get_common_files()

def build_default_manifest():
    for line in fileinput.FileInput(new_manifest):
        for name in new_file:
            if line.strip() in name:
                print(name) # works as it should and displays all that i need
                return name  # only shows me the first element 


good_name = build_default_manifest()
print(good_name)  

我希望我已经提供了我需要的一切,但如果没有,请随时回来找我...

当你这样做时:

for f in files:
    return files

这不太对。 这里有2个问题。 首先,它所做的只是返回files ——整个过程,一次。 return周围放置一个循环体并没有真正意义。 可能你想输入return f ,迭代结果......但这会导致第二个问题......

return语句将在第一次遇到时运行,导致函数结束,仅此而已。 因此,仅更改返回的内容return f仍然不起作用:它只会返回files的第一个值。

这实际上非常接近于称为生成器的稍微更高级的模式。 如果你用这个替换上面的:

for f in files:
    yield f

那么你的功能应该可以工作。 解释它为什么起作用并不那么容易,但是这个问题有一些很好的答案应该会有所帮助。

出于好奇,您是自己从头开始编写的,还是从某个地方遵循示例? 我只是有点惊讶您与生成器模式的接近程度,显然是无意的,并且假设您之前没有意识到它。

def build_default_manifest():
    for line in fileinput.FileInput(new_manifest):
        for name in new_file:
            if line.strip() in name:
                yield name  

good_name = build_default_manifest()
for name in good_name:

    print(name)

就像 Z4-tier 说的,听起来你需要一个发电机。

您可以像平常一样使用 good_name 中的每个元素进行函数调用。

也许我在这里遗漏了一些东西,但您的 for 循环(for r、d...)不是已经创建了名为“文件”的列表吗? 那么,为什么不直接改变:

for f in files:
    return files

return files

哪个应该只返回整个列表?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM