我有一个python中的方法/函数,其中我';我试图得到一个返回值,然后在另一个函数中用作变量
因此,我正在尝试学习Python,同时编写一些代码来帮助自己完成一些平凡的任务。 所以我有一个函数,如果我使用print语句来显示我所需要的内容,它工作得很好,但是当我将“print”语句替换为“return”时,我只得到列表中的第一个元素,因为“return”导致函数退出,但我不知道如何让它返回其余的元素。 我尝试了很多东西,现在已经读了好几个小时了,但仍然没有进一步的进展。 目标:读取目录中的所有“*.common”文件,然后将它们与包含一些名称的文本文件进行比较,如果它们匹配,则返回*.common文件的名称,以便我可以在另一个函数中将其用作变量。 到目前为止,我一直在写代码我有一个python中的方法/函数,其中我';我试图得到一个返回值,然后在另一个函数中用作变量,python,Python,因此,我正在尝试学习Python,同时编写一些代码来帮助自己完成一些平凡的任务。 所以我有一个函数,如果我使用print语句来显示我所需要的内容,它工作得很好,但是当我将“print”语句替换为“return”时,我只得到列表中的第一个元素,因为“return”导致函数退出,但我不知道如何让它返回其余的元素。 我尝试了很多东西,现在已经读了好几个小时了,但仍然没有进一步的进展。 目标:读取目录中的所有“*.common”文件,然后将它们与包含一些名称的文本文件进行比较,如果它们匹配,则返回*.c
# 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
这是不完全正确的。这里有两个问题。首先,这只是返回文件
——整个过程,一次。在返回
周围放置一个循环体并没有真正的意义。可能您想键入返回f
,以迭代结果……但这导致了第二个问题
return
语句将在第一次遇到它时运行,导致函数结束,仅此而已。因此,仅更改返回到return f
的内容仍然不起作用:它将只返回文件中的第一个值
这实际上非常接近一种更高级的模式,称为生成器。如果您将上述模式替换为:
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说的,听起来你需要一个发电机
您可以使用每个元素的良好名称进行函数调用,就像普通调用一样。也许我在这里遗漏了一些东西,但您的for循环(对于r,d…)是否已经创建了名为“文件”的列表?因此,为什么不更改:
for f in files:
return files
到
哪个应该只返回整个列表?这回答了你的问题吗?当你启动for循环for f in files
时,你会立即执行一个返回
。因此循环在第一次迭代后立即退出。你可以只执行返回文件
。你不必执行for循环,因为files
i它已经是一个列表。```您只得到文件中f的第一个值实际上,他正在获取全部文件
。再次检查返回
:-D@RicardoC阿尔德内斯啊,你说得对!眼光好,我会更新的。谢谢大家的及时回复,非常感谢。我会尝试一下,并根据我找到的例子,提供反馈@Z4 tier我自己写的。
return files