Files

78 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 2-4 课完整示例:推导式与简化写法
#
# 本示例先展示普通循环,再展示作用相同的推导式。
# 推导式适合简单的数据转换和筛选,不应为了缩短代码而堆叠复杂逻辑。
def get_enabled_agent_names(agents):
"""使用列表推导式返回所有已启用 Agent 的名称。"""
return [agent["name"] for agent in agents if agent["enabled"]]
def get_agent_tool_counts(agents):
"""使用字典推导式建立 Agent 名称与工具数量的对应关系。"""
return {
agent["name"]: len(agent.get("tools", []))
for agent in agents
}
def get_unique_tools(agents):
"""使用集合推导式收集不重复的工具名称。"""
return {
tool
for agent in agents
for tool in agent.get("tools", [])
}
def get_status_text(agent):
"""使用条件表达式返回简短的中文状态。"""
return "启用" if agent["enabled"] else "停用"
def main():
"""准备 Agent 数据,并演示四种简化写法。"""
agents = [
{
"name": "代码助手",
"enabled": True,
"tools": ["搜索", "终端"],
},
{
"name": "聊天助手",
"enabled": False,
"tools": ["搜索"],
},
{
"name": "测试助手",
"enabled": True,
"tools": ["终端", "测试"],
},
]
# 普通循环写法:先创建空列表,再逐条判断和添加。
names_from_loop = []
for agent in agents:
if agent["enabled"]:
names_from_loop.append(agent["name"])
# 列表推导式可以简洁表达同一个“遍历、筛选、保存”过程。
enabled_names = get_enabled_agent_names(agents)
tool_counts = get_agent_tool_counts(agents)
unique_tools = get_unique_tools(agents)
print(f"普通循环结果:{names_from_loop}")
print(f"列表推导式结果:{enabled_names}")
print(f"工具数量字典:{tool_counts}")
print(f"不重复工具:{sorted(unique_tools)}")
print("Agent 状态:")
for agent in agents:
status_text = get_status_text(agent)
print(f"- {agent['name']}{status_text}")
if __name__ == "__main__":
main()