我生成使用python的(2.7)eval()
功能,像這樣一個條件語句:python有條件(if)語句的最大長度是多少?
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
和代碼工作正常...
如果由代碼產生條件列表,他們爲什麼不馬上在產生評估?爲什麼轉換爲字符串呢? –
@OliverW。條件來自配置文件。因爲它們是'或'的陳述,所以我沒有看到如何一次評估一個。我想我可以有一個布爾標誌,開始爲False,然後設置爲True,如果其中一個'if'語句評估爲True。 – philshem