如何在列表选择的if/else替代中不评估两个函数?

2024-09-29 23:29:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我的处境是:

  1. 函数内容在被求值之前以字符串形式动态创建
  2. 我不想使用if test: dosomething else: dosomethingElse来组合内容,因为用户可以更改部分字符串内容,而且我不希望他们必须管理条件语句中数学表达式之间的空格。在

因此,我使用下面的列表技巧:[dosomethingElse, dosomething][ test ](对测试的正确/错误答案给出dosomething/dosomethingElse)。在

溶液工作正常,但dosomething和dosomethingElse都是 在测试检查之前评估过,我只想评估一个。(我的时间很紧)。在

有没有办法在一行中只计算一个函数?在

这里是代码的主要步骤这里列出了依赖项,但它们在原始程序中得到了很好的管理。在

  1. 创造独特的个性魅力

    def gen_id():
        s = 10000
        while s:
            yield s
            s += 1
    
    fun_ticket = gen_id()
    
  2. 有趣的描述(名称、参数、表达式、id)

    from collections import defaultdict
    d= defaultdict(lambda :defaultdict())
    
    d["dosomething"]["args"] = set(["argA","argB"])
    d["dosomething"]["exp"] = "return argA + argB"
    d["dosomething"]["id"] = "f_%d"%(fun_ticket.next())
    
    d["dosomethingElse"]["args"] = set(["argX","argY","argZ"])
    d["dosomethingElse"]["exp"] = "return argX + argY+ argZ"
    d["dosomethingElse"]["id"] = "f_%d"%(fun_ticket.next())
    
    d["doChoice"]["args"] = set(["argE","argF"])
    d["doChoice"]["exp"] = "return [dosomethingElse, dosomething][argE > 0] + argF"
    d["doChoice"]["id"] = "f_%d"%(fun_ticket.next())
    
  3. 准备要评估的文件功能。在

    dependencies =  ('dosomething', 'dosomethingElse', 'doChoice')
    Allargs = set().union(*[d[x]["args"] for x in dependencies])
    
    
    funChoice = 'def %s(%s): %s'%(d['doChoice']['id'],",".join(Allargs),d['doChoice']["exp"])
    
  4. 结果:函数字符串为:

    def f_10002(argX,argY,argZ,argA,argB,argE,argF): return [f_10001(argX,argY,argZ), f_10000(argA,argB)][argE > 0] + argF
    

这里有一个问题:功能评估-剂量测定剂量测定。有没有一种方法可以在不使用if-else的情况下只计算一个(以及字符串中的空间管理问题)?在


Tags: 字符串idreturnargsticketsetfundosomething
1条回答
网友
1楼 · 发布于 2024-09-29 23:29:14

使用conditional expression

dosomething if test else dosomethingelse

根据test的结果,只评估dosomething和{}中的一个。引用文件:

The expression x if C else y first evaluates the condition, C (not x); if C is true, x is evaluated and its value is returned; otherwise, y is evaluated and its value is returned.

使其适应您的代码:

^{pr2}$

相关问题 更多 >

    热门问题