首页 > 解决方案 > for 循环打印所有值但只返回一个值

问题描述

所以我有一个函数,它遍历目录中的所有文件名,打开 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())

标签: pythonpython-2.7returnreturn-value

解决方案


所以您是说当您替换return collection_name为 时print(collection_name),该功能是否正常工作?

这样做的原因是因为return是一个控制流语句。当代码遇到return语句时,它会立即停止正在执行的操作并退出函数。请注意,这意味着它不会继续for循环的下一次迭代。

print()不改变程序的流程;因此,代码会点击它,执行它,然后继续进行for循环的下一次迭代。

对于这个问题,我推荐

  1. 在函数开头创建一个空列表
  2. 而不是returning collection_name,而是将其添加到列表中
  3. 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

推荐阅读