如何将文本的一部分编译成代码行?

问题描述 投票:0回答:2

我想生成看起来像这样的代码行:

search.condition1(ape).condition2(monkey).condition3(gorilla)

这是用于在诸如以下的结构中使用它:

jungle(search.condition1(ape).condition2(monkey).condition3(gorilla))

问题是,我只希望将已设置的条件(至少将始终设置一个条件)包括在字符串中。我是通过用户input设置的。因此,假设我已经收到:

cond1 =
cond2 = giraffe
cond3 = zebra

在这种情况下,代码行应为:

search.condition2(giraffe).condition3(zebra)

即,完全排除condition1

我已经尝试过此解决方案:

searchstring = "search."

if len(cond1) > 1:
    searchstring += "condition1(cond1)
else: pass

if len(cond2) > 1:
    searchstring += ".condition(cond2)"
else: pass

if len(cond3) > 1:
    searchstring += ".condition(cond3)"
else:pass

这通过字符串附加正确地编译了我想要的东西,但是显然是[string

所以,当我写...

jungle(searchstring)

...可以说,它无法实现与原始代码相同的功能。它不可执行。

是否有解决方案的想法或更好的做法?

python python-3.x
2个回答
0
投票

您不想构造代码。您想根据需要修改查询集。

例如:

conditions = ['foo', 'bar', 'baz']

query = search

for term in conditions:
    query = query.condition(term)

jungle(query)

相当于search.condition('foo').condition('bar')...。您正在对前一个.condition()的返回值调用condition()方法,并将最终结果用作jungle()的参数。


0
投票

let

cond1 = ''
cond2 = 'giraffe'
cond3 = 'zebra'

然后创建字符串命令

string_command = 'jungle(search.{})'.format('.'.join(['condition{}({})'.format(str(i+1), cond) for i, cond in enumerate([cond1, cond2, cond3]) if cond]))

将是

'jungle(search.condition2(giraffe).condition3(zebra))'

然后评估命令

eval(string_command)
© www.soinside.com 2019 - 2024. All rights reserved.