我想将一个语句传递给Python函数。在函数中,我希望先执行其他一些操作,然后再执行该语句。默认情况下,Python会先评估该语句,然后将其结果作为参数传递。
有没有办法改变这种行为呢?
我唯一找到的方法是将该语句包装在一个函数中,然后再传递该函数。
有没有办法改变这种行为呢?
我唯一找到的方法是将该语句包装在一个函数中,然后再传递该函数。
很抱歉,这是不可能的。表达式求值的结果传递给函数而不是表达式本身。你需要将语句包装在一个函数或lambda表达式中。
In [ 2]: add_one = lambda a: a+1
In [ 3]: def my_func2(a, statement):
....: print a
....: a = statement(a)
....: print a
....:
In [ 4]: a
Out[ 4]: 9
In [ 5]: my_func2(a, add_one)
9
10
但是有一种exec
语句,提供了一种不自然、不安全且可能令人困惑的替代方案:
In [ 6]: def my_func(a, statement):
....: print a
....: exec(statement)
....: print a
....:
In [ 7]: a = 9
In [ 8]: my_func(a, 'a += 1')
9
10