You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python预定义条件字典并打印条件表达式的实现方案咨询

解决方案

方法一:用字符串存储条件表达式(简单直接)

你可以将条件以字符串形式预先定义,在函数内部通过eval()执行计算,同时直接用字符串作为表达式展示,无需维护两份字典:

import numpy as np

# 提前定义条件表达式字典(数组声明之前)
input_conditions = {
    1: "(a > b) & (b < c)",
    2: "(a > b) & (b > c)",
    3: "(a > b) & (b == c)"
}

def myfunc(conds):
    a = np.array([1,2,3,4,5])
    b = np.array([1,1,1,1,1])
    c = np.array([5,4,3,2,1])
    
    for k, expr_str in conds.items():
        # 执行条件计算
        condition_result = eval(expr_str)
        # 打印表达式和统计结果
        print(f'{k}.) {expr_str}: {np.sum(condition_result)}')

myfunc(input_conditions)

运行后输出完全符合预期:

1.) (a > b) & (b < c): 3
2.) (a > b) & (b > c): 0
3.) (a > b) & (b == c): 1

为什么这个方案可行?

  1. 延迟计算:条件以字符串形式存储,不会在定义时立即执行,避免了提前引用未定义变量的问题,直到函数内部有了a/b/c后才通过eval()执行。
  2. 表达式复用:直接用存储的字符串作为显示内容,不需要手动维护单独的描述字典,避免了重复劳动和不一致的风险。

注意事项

  • eval()会执行传入的字符串代码,仅在你完全信任条件来源时使用(这里是你自己定义的条件,完全安全)。如果需要处理不可信输入,建议用更安全的方式(比如AST解析)。

方法二:用自定义类封装条件(更优雅,避免eval)

如果你不想用eval(),可以自定义一个类来封装条件的表达式字符串和计算逻辑:

import numpy as np

class Condition:
    def __init__(self, expr_str):
        self.expr_str = expr_str
        # 把表达式转换成可调用的函数
        self.func = eval(f"lambda a,b,c: {expr_str}")
    
    def __call__(self, a, b, c):
        return self.func(a, b, c)

# 提前定义条件字典
input_conditions = {
    1: Condition("(a > b) & (b < c)"),
    2: Condition("(a > b) & (b > c)"),
    3: Condition("(a > b) & (b == c)")
}

def myfunc(conds):
    a = np.array([1,2,3,4,5])
    b = np.array([1,1,1,1,1])
    c = np.array([5,4,3,2,1])
    
    for k, cond in conds.items():
        result = cond(a, b, c)
        print(f'{k}.) {cond.expr_str}: {np.sum(result)}')

myfunc(input_conditions)

这个方案把条件封装成对象,既保留了表达式字符串,又封装了计算逻辑,比直接用eval()更结构化,同样满足你的需求。


内容的提问来源于stack exchange,提问作者TioLiba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:43:20