for循环显示所有值,但仅返回一个值

时间:2019-01-09 15:23:23

标签: python python-2.7 return return-value

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

1 个答案:

答案 0 :(得分:2)

因此,您是说将return collection_name替换为print(collection_name)时,该功能正常工作吗?

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

print()不会更改程序的流程;因此,代码将其击中并执行,然后继续进行for循环的下一个迭代。

对于这个问题,我建议

  1. 在函数开头添加一个空列表
  2. 而不是returncollection_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