如何使用Python将字符串解释为条件?

时间:2017-12-08 07:39:37

标签: python python-3.x if-statement conditional-statements

我需要使用以下语法来过滤列表operations

a = [ope for ope in operations if ope[0] == 1]

if语句条件是可变的,可能包含多个条件:

a = [ope for ope in operations if ope[0] == 1 and ope[1] == "test"]

我使用函数来构建条件并将其作为字符串返回:

>>>> c = makeCondition(**{"id": 1, "title": 'test'})
>>>> c
"ope[0] == 1 and ope[1] == 'test'"

有没有办法将c变量集成到列表过滤中?像这样的东西(当然,c变量在下面的例子中被评估为一个字符串):

 a = [ope for ope in operations if c]

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

eval被视为unsafe,通常会被避免。

您可以将[filter][1]与功能结合使用。为此,您应该将测试条件放在一个函数中。

这是一个创建1到100之间的数字列表的示例,它是3和7的倍数

def mult3(n):
    return n % 3 == 0

def mult7(n):
    return n % 7 == 0

def mult3_and_7(n):
    return mult3(n) and mult7(n)

list(filter(mult3_and_7, range(1, 101)))

更简洁的方法是使用lambdas

list(filter(lambda n: (n % 3 == 0) and (n % 7 == 0), range(1, 101))

很酷的是你可以像这样链接过滤器:

list(filter(lambda n: n % 3 == 0, filter(lambda n: n % 7 == 0, range(1, 101))))

他们都给[21, 42, 63, 84]

这种方法可以帮助您清楚地链接多种情况。

答案 1 :(得分:0)

如评论所述,如果您想要将字符串更改为表达式,则可以使用eval(string)