Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎样才能把文本编译成代码行呢?_Python_Python 3.x - Fatal编程技术网

Python 我怎样才能把文本编译成代码行呢?

Python 我怎样才能把文本编译成代码行呢?,python,python-3.x,Python,Python 3.x,我想生成一行代码,看起来像这样: search.condition1(ape).condition2(monkey).condition3(gorilla) 这是为了在建筑中使用它,例如: jungle(search.condition1(ape).condition2(monkey).condition3(gorilla)) 问题是,我只希望字符串中包含已设置的条件(至少将始终设置一个)。我通过用户输入设置这些。那么,假设我已经收到: cond1 = cond2 = giraffe con

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

search.condition1(ape).condition2(monkey).condition3(gorilla)
这是为了在建筑中使用它,例如:

jungle(search.condition1(ape).condition2(monkey).condition3(gorilla))
问题是,我只希望字符串中包含已设置的条件(至少将始终设置一个)。我通过用户
输入设置这些。那么,假设我已经收到:

cond1 =
cond2 = giraffe
cond3 = zebra
在这种情况下,代码行应为:

search.condition2(giraffe).condition3(zebra)
也就是说,完全排除了
条件1

我尝试过这个解决方案:

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
这可以通过字符串追加正确编译我想要的内容,但显然是作为
字符串编译的

所以,当我写作的时候

jungle(searchstring)
。。。可以说,这并不能实现与原始代码相同的功能。它不是可执行的

有什么解决方案或更好的做法吗?

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

例如:

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

如果您不知何故需要调用不同的方法,而不是总是调用相同的
条件()
(这在您的问题中并不完全清楚),那么您需要找出其中的逻辑,然后简单地执行以下操作:

query = getattr(query, 'name_of_method_to_call')(term)

根据需要动态构造“
”方法的名称以调用“
”。

顺便说一句,
否则:pass
完全是多余的。谢谢。是的,方法的名称有时会有所不同。我的实际案例是构建一个类似以下内容的twitter搜索:
tweetCriteria=get.manager.tweetCriteria().setUsername(“巴拉克奥巴马”).setSince(“2015-09-10”).setUntil(“2016-01-01”).setMaxTweets(1.setEmoji(“unicode”)
。我觉得整个过程都必须作为一个整体来传递,这会使您的迭代方法不合适。不?好吧,同样的想法。如果…:query=query.setUsername(…)
then,您将使用一些
而不是
for
循环。根据您使用的库的不同,您甚至可能不需要
query=
部分。只要做
if…:query.setUsername(…)
就足够了。
query = getattr(query, 'name_of_method_to_call')(term)