如何正确创建数组并在作用域外使用?及db包镜头名称提取需求
关于数组作用域与镜头名称提取的问题解答
一、如何正确创建数组并在作用域外部使用?
核心思路就是让数组的可访问范围覆盖到你需要用它的地方,给你两种实用的方式:
1. 全局作用域定义(简单但不推荐复杂项目)
直接在所有函数/代码块外面定义数组,这样整个代码里都能访问到。但如果是大型项目,容易导致变量冲突,尽量少用:
# 全局定义数组 all_shots = [] def collect_shots(): # 用global关键字声明要修改全局数组 global all_shots all_shots = ["清晨外景", "室内对话", "夜景追车"] collect_shots() # 外部直接使用 print(all_shots) # 输出 ["清晨外景", "室内对话", "夜景追车"]
2. 局部创建后通过返回值传递(推荐规范做法)
在函数内部创建数组后,把它返回给外部变量,这样既不会污染全局,又能在外部使用:
def create_shot_list(): # 函数内部(局部作用域)创建数组 shot_list = ["特写镜头A", "全景镜头B", "中景镜头C"] # 返回数组给外部 return shot_list # 接收返回的数组,现在外部就能用啦 usable_shot_list = create_shot_list() print(usable_shot_list) # 输出 ["特写镜头A", "全景镜头B", "中景镜头C"]
要是你用的是JavaScript,逻辑也差不多:
function buildShotArray() { let localShots = ["镜头1", "镜头2", "镜头3"]; return localShots; } const outerShots = buildShotArray(); console.log(outerShots); // 输出 ["镜头1", "镜头2", "镜头3"]
二、提取拍摄日所有会话下的镜头名称
结合你说的db包流程,我给你写个逻辑清晰的示例代码,你可以根据实际的API细节调整:
假设你的db包提供这几个方法:
get_session_list(shoot_day):获取指定拍摄日的会话列表get_shots_in_session(session_id):获取某会话下的已拍摄镜头getCapture(shot_id):获取单个镜头的详细信息
那提取所有镜头名称的代码可以这么写:
def get_all_shot_names(target_shoot_day): shot_names = [] # 第一步:拿到该拍摄日的所有会话 sessions = db.get_session_list(target_shoot_day) # 遍历每个会话 for session in sessions: # 第二步:拿到当前会话下的所有已拍摄镜头 shots = db.get_shots_in_session(session["id"]) # 遍历每个镜头 for shot in shots: # 第三步:获取镜头的详细信息 capture_data = db.getCapture(shot["id"]) # 第四步:提取你要的镜头名称(Node Information下的NAME) # 加个容错处理,避免字段不存在报错 name = capture_data.get("Node Information", {}).get("NAME", "未命名镜头") shot_names.append(name) return shot_names # 调用示例:传入目标拍摄日 my_shoot_day = "2024-06-10" all_names = get_all_shot_names(my_shoot_day) print(all_names) # 输出该拍摄日所有镜头的名称列表
需要注意的点:
- 要确认db包返回的数据结构是否和示例匹配,比如会话有没有
id字段,镜头有没有id字段,getCapture返回的字典里是不是确实有Node Information→NAME - 如果数据量特别大,可以考虑异步请求或者批量处理,但常规场景下上面的循环逻辑完全够用
内容的提问来源于stack exchange,提问作者Nicole Pinto
相关产品推荐
相关产品推荐

