Python能处理未评估的表达式参数吗?

3
我想将一个语句传递给Python函数。在函数中,我希望先执行其他一些操作,然后再执行该语句。默认情况下,Python会先评估该语句,然后将其结果作为参数传递。
有没有办法改变这种行为呢?
我唯一找到的方法是将该语句包装在一个函数中,然后再传递该函数。

8
我唯一找到的方法是将我的语句包装在一个函数中,然后传递这个函数。伙计,这不是什么坏事。 - nafas
你只能传递一个函数或者一个lambda表达式(即内联函数)。 - poke
2个回答

2

很抱歉,这是不可能的。表达式求值的结果传递给函数而不是表达式本身。你需要将语句包装在一个函数或lambda表达式中。


2
大多数Python程序员都认为将函数传递是解决这个问题的自然、最安全和最可维护的方法。
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

说实话,我不明白为什么你要这样做,不过。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接