除了最好的做法,有没有令人信服的理由不这样做?
我正在编写一个post-commit钩子,用于Google Code项目,该项目通过JSON对象提供提交数据.GC提供HMAC身份验证令牌以及请求(在JSON数据之外),因此通过验证该令牌,我可以高度确信JSON数据是良性的(因为不信任Google)并且有效.
我自己(简短)的调查表明,JSON恰好是完全有效的Python,但"\/"转义序列除外- GC似乎没有生成.
因此,当我使用Python 2.4(即没有json模块)时,eval()看起来真的很诱人.
编辑:为了记录,我不是在问这是不是一个好主意.我非常清楚它不是,我非常怀疑即使我最终将它用于这个项目,我也会将这项技术用于任何未来的项目.我只是想确保我知道如果我这样做会遇到什么样的麻烦.:-)
例如,在下面的代码中,我想使用x作为参考获得列表[1,2,3].
In[1]: pasta=[1,2,3]
In:[2]: pasta
Out[2]: [1, 2, 3]
In [3]: x='pas'+'ta'
In [4]: x
Out[4]: 'pasta'
Run Code Online (Sandbox Code Playgroud) 我有一个用户输入的字符串,它已经是元组格式,并希望将其转换/转换为python中的实际元组.我怎样才能做到这一点?例如:
strTup = '(5, 6)'
Run Code Online (Sandbox Code Playgroud)
想将上面的内容转换为元组(5,6).我尝试了tuple(strTup)哪些不起作用,因为它使每个角色成为自己的元组.
我现在已经在这个项目上工作了几个月。该项目的最终目标是评估类似于功能测试的整个数字逻辑电路。只是给出问题的范围。我在此处创建的主题处理的是我在分析布尔表达式时遇到的问题。对于数字电路内的任何门,它具有以全局输入表示的输出表达式。例如:((A&B)|(C&D)^E)。然后,我想用这个表达式来计算所有可能的结果并确定每个输入对结果有多大影响。
我发现最快的方法是通过建立一个真值表作为矩阵并查看某些行(因为它的题外话就不再详述该算法),一旦唯一输入的数量超过26,就会出现问题。 -27(大约在此范围内),内存使用量远远超过16GB(我的计算机具有的最大容量)。您可能会说“购买更多RAM”,但是随着输入每增加1,内存使用量就会增加一倍。我分析的某些表达式远远超过200种独特的输入...
我现在使用的方法使用compile方法将表达式作为字符串。然后,我使用从compile方法中找到的所有输入创建一个数组。然后,我会从可能值的样本中随机选择一个逐行生成的“真”和“假”列表(这样,如果样本大小与范围相同,则它等同于真值表中的行,并且当事情太长而无法计算时,将允许我限制样本数量)。然后将这些值与输入名称压缩在一起,并用于评估表达式。这将给出初始结果,此后,我在随机布尔列表中逐列浏览并翻转布尔值,然后再次用输入压缩它,然后再次评估它以确定结果是否更改。
所以我的问题是:有没有更快的方法?我已经包括执行工作的代码。我尝试过查找和替换正则表达式,但是它总是比较慢(从我所见)。考虑到内部for循环将运行N次,其中N是唯一输入的数量。如果N > 15,则外部for循环I限制为运行2 ^ 15。因此这将导致eval被执行Min(2^N, 2^15) * (1 + N)...
作为更新,以澄清我的确切要求(对您的困惑,抱歉)。计算我需要的算法/逻辑不是问题。我正在寻找python内置'eval'的替代方法,它将更快地执行相同的操作。(采用布尔表达式格式的字符串,将字符串中的变量替换为字典中的值,然后求值该字符串)。
#value is expression as string
comp = compile(value.strip(), '-', 'eval')
inputs = comp.co_names
control = [0]*len(inputs)
#Sequences of random boolean values to be used
random_list = gen_rand_bits(len(inputs))
for row in random_list:
valuedict = dict(zip(inputs, row))
answer = eval(comp, valuedict)
for column in range(len(row)):
row[column] = ~row[column]
newvaluedict = dict(zip(inputs, row))
newanswer = eval(comp, newvaluedict)
row[column] = …Run Code Online (Sandbox Code Playgroud) 我有一个保存在字符串中的元组列表(不幸的是).我正在寻找一种快速有效的方法将此字符串转换为实际的元组列表.
例:
mylist_string = '[(40.7822603, -73.9525339), (40.7142, -74.0087), (40.7250027, -73.9413106), (40.703422, -73.9862948), (40.7169963, -74.0149991), (40.7420448, -73.9918131), (40.7287, -73.9799), (40.7757237, -73.9492357), (40.7169904, -73.9578252), (40.726103, -73.9780367), (40.7776792, -73.9585829), (40.6750972, -73.9679734), (40.6867687, -73.9743078), (40.6684762, -73.9755826), (40.7169, -73.9578), (40.6996798, -73.9291393), (40.6680182, -73.9809183), (40.7346, -74.0073), (40.6871087, -73.9741862), (40.7160416, -73.9452393), (40.7178984, -74.0063829)]'
预期的输出是Python中的元组列表.
谢谢
python ×5
string ×2
boolean ×1
eval ×1
expression ×1
json ×1
list ×1
object ×1
python-2.7 ×1
python-3.x ×1
reference ×1
tuples ×1