python - 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())
解决方案
所以您是说当您替换return collection_name
为 时print(collection_name)
,该功能是否正常工作?
这样做的原因是因为return
是一个控制流语句。当代码遇到return
语句时,它会立即停止正在执行的操作并退出函数。请注意,这意味着它不会继续for
循环的下一次迭代。
print()
不改变程序的流程;因此,代码会点击它,执行它,然后继续进行for
循环的下一次迭代。
对于这个问题,我推荐
- 在函数开头创建一个空列表
- 而不是
return
ingcollection_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
推荐阅读
- python - 熊猫将列表值映射到相应的列
- mysql - 有什么方法可以连接多个表并对要使用 MySQL 返回的字段之一执行 GROUP BY 和 COUNT 吗?
- java - 通过 Spring Boot JPA 复制严格的关系数据库
- java - 如何使用 java 使用现有的 json 数组值更新 java 中的 json 数组。外部 json 文件中的值未更新
- angular7 - 在gojs中打开上下文菜单时如何使节点可拖动?
- asp.net-core-webapi - http://localhost:5000/api/users/siteUsers/[object%20Object],[object%20Object],[object%20Object] 的 Http 失败响应:400 Bad Request
- spring-mvc - 如何使用 freemarker 制作下拉列表?
- bisection - 使用二分搜索,编写一个程序,计算在 12 个月内还清信用卡余额所需的最低每月固定还款额
- javascript - v-model:道具与计算
- python - 重新安装 Anaconda 后,我无法使用 numpy 或安装 requirements.txt