Я хочу передать инструкцию функции 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
Честно говоря, я не понимаю, почему вы это сделаете.
Нет, это невозможно. Результат оценки выражения передается функции, а не самому выражению. Вы будете обертывать свое утверждение функцией или выражением лямбда.