python条件(if)语句有最大长度吗?

时间:2015-04-17 13:27:46

标签: python python-2.7 conditional eval conditional-statements

我使用python的(2.7)eval()函数生成条件语句,如下所示:

my_list = ['2 > 1','3 > 2','4 > 3']

if eval('(' + ') or ('.join(my_list) + ')'):
    print 'yes'
else:
    print 'no'

在我的例子中,列表由代码生成,my_list来自参数文件,列表与条件表达式中的'或'语句连接。上面的代码打印'是'。

它适用于小型列表,但是eval()语句中的一定数量的字符,我收到字符串错误。

有些搜索发现这些线程指向了一个错误:

但是他们的最大eval()大小比我发现的要大得多。在我的情况下,我发现问题开始在1744和1803之间。我尝试了这个代码,它确实在两个语句之间崩溃了

>>> eval("1.0*"*10000+"1.0")
1.0
>>> eval("1.0*"*100000+"1.0")
# segfault here

所以,这让我回想起它不是eval(),但实际上是if语句的最大值。

有条件地在列表中应用不涉及长字符串和eval()函数的规则的另一种方法是什么?

有趣的是,我让my_list更大了:

my_list = ['2 > 1']*1000000

并且代码工作正常......

1 个答案:

答案 0 :(得分:9)

也许我错过了一些东西,但似乎是:

any(map(eval, my_list))

完全符合您的要求。

from itertools import imap

any(imap(eval, my_list)) # Python 2.

如果第一个元素篡改为True(也称为"短路"),那么评估列表的其余部分会产生很好的效果。这可能是也可能不是你想要的。

示例:

> any(map(eval, ['2 > 1','3 > 2','4 > 3']))
True