gpt4 book ai didi

python - 如何不评估列表选择 if/else 中的两个函数?

转载 作者:行者123 更新时间:2023-11-28 17:46:00 26 4
gpt4 key购买 nike

我现在的情况是:

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

因此,我使用以下列表提示:[dosomethingElse, dosomething][ test ],(测试的真/假答案给出了 dosomething/dosomethingElse)。

该解决方案工作正常,但 dosomething 和 dosomethingElse 都是在测试检查之前评估,我有兴趣只评估一个。 (我的时间非常紧迫)。

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

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

  1. 创建唯一的 fun_id

    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. 准备要评估的 doChoice 函数。

    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. 结果:funChoice 字符串是:

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

问题是:funChoice evaluation eval doSomething AND doSomethingElse。有没有办法只评估一个而不使用 if else(以及字符串中的空间管理问题......)?

最佳答案

使用 conditional expression :

dosomething if test else dosomethingelse

只有 dosomethingdosomethingelse 之一将根据 test 的结果进行评估。引用文档:

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.

根据您的代码调整它:

d["doChoice"]["exp"] = "return (dosomething if argE > 0 else dosomethingElse) + argF"

关于python - 如何不评估列表选择 if/else 中的两个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18122255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com