我想将一个语句传递给一个python函数。这个声明只能在函数中做一些其他的事情之后才能执行。默认情况下,python会评估该语句,然后将其结果作为参数传递。python可以处理未经评估的表达式参数吗?
有什么方法可以改变这种行为吗?
我发现的唯一方法是将我的语句包装在函数中,然后传递函数。
我想将一个语句传递给一个python函数。这个声明只能在函数中做一些其他的事情之后才能执行。默认情况下,python会评估该语句,然后将其结果作为参数传递。python可以处理未经评估的表达式参数吗?
有什么方法可以改变这种行为吗?
我发现的唯一方法是将我的语句包装在函数中,然后传递函数。
大多数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
老实说,我不明白你为什么要这样做。
不,这是不可能的。表达式评估的结果被传递给函数而不是表达式本身。你将用函数或lambda表达式来包装你的语句。
'我发现的唯一方法是将我的语句包装在一个函数中,然后传递函数.'它不是一件坏事。 – nafas
您只能传递一个函数或lambda(这是一个内联函数)。 – poke