2015-11-23 102 views
3

我想将一个语句传递给一个python函数。这个声明只能在函数中做一些其他的事情之后才能执行。默认情况下,python会评估该语句,然后将其结果作为参数传递。python可以处理未经评估的表达式参数吗?

有什么方法可以改变这种行为吗?

我发现的唯一方法是将我的语句包装在函数中,然后传递函数。

+8

'我发现的唯一方法是将我的语句包装在一个函数中,然后传递函数.'它不是一件坏事。 – nafas

+0

您只能传递一个函数或lambda(这是一个内联函数)。 – poke

回答

1

大多数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 

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

2

不,这是不可能的。表达式评估的结果被传递给函数而不是表达式本身。你将用函数或lambda表达式来包装你的语句。