¿Puede Python manejar argumentos de expresión no evaluados?

Quiero pasar una statement a una función python. Esta statement solo debe ejecutarse después de hacer otras cosas en la función. De forma predeterminada, Python evalúa la statement y luego pasa su resultado como parámetro.

¿Hay alguna manera de cambiar este comportamiento?

La única manera que he encontrado es envolver mi statement en una función y luego pasarla.

La mayoría de los progtwigdores de Python están de acuerdo en que pasar la función sería el enfoque natural, más seguro y más fácil de mantener para este problema:

 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 

Pero hay una statement exec que proporciona una alternativa poco natural, insegura y potencialmente confusa:

 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 

Con toda honestidad, no puedo ver por qué lo harías de esta manera, sin embargo.

No esto no es posible. El resultado de la evaluación de la expresión se pasa a la función en lugar de a la expresión en sí. Tendrá que ajustar su statement en una función o una expresión lambda.