因此,我有一个函数,该函数循环遍历目录中的所有文件名,打开yaml文件并获取两个属性,即数据库名和集合名。当我在函数中使用print
语句而不是return
时,这将输出所有文件名。但是,在使用return
语句时,这只会返回一个值。我真的不确定为什么要得到这个输出,并尝试了无数次以弄清楚为什么这样做。我的功能如下:
def return_yml_file_names():
"""return file names from the yaml directory"""
collections = os.listdir('yaml/')
collections.remove('export_config.yaml')
for file in collections :
with open('yaml/' + file, 'r') as f:
doc = yaml.load(f)
collection_name = doc["config"]["collection"]+".json"
return collection_name
print(return_yml_file_names())
答案 0 :(得分:2)
因此,您是说将return collection_name
替换为print(collection_name)
时,该功能正常工作吗?
其原因是因为return
是控制流语句。当代码命中return
语句时,它将立即停止正在执行的操作并退出该函数。请注意,这意味着它不会继续进行for
循环的下一次迭代。
print()
不会更改程序的流程;因此,代码将其击中并执行,然后继续进行for
循环的下一个迭代。
对于这个问题,我建议
return
将collection_name
添加到列表中for
循环之后,返回现在已满的列表。代码如下:
def return_yml_file_names():
"""return file names from the yaml directory"""
collections = os.listdir('yaml/')
collections.remove('export_config.yaml')
collection_name_list = []
for file in collections :
with open('yaml/' + file, 'r') as f:
doc = yaml.load(f)
collection_name = doc["config"]["collection"]+".json"
collection_name_list.append(collection_name)
return collection_name_list