78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
# 第 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()
|