Большинство программистов на 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
Честно говоря, я не понимаю, почему вы это сделаете.