Python - получить аргументы вызова unevaluated [duplicate]

Я хочу передать инструкцию функции python. Это утверждение должно выполняться только после того, как я сделаю что-то еще в этой функции. По умолчанию python оценивает оператор и затем передает его результат в качестве параметра.

Есть ли способ изменить это поведение?

Единственный способ, который я нашел, - это обернуть мой оператор в функцию, а затем передать функцию.

3
задан nsheff 23 November 2015 в 14:11
поделиться

2 ответа

Большинство программистов на 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

Честно говоря, я не понимаю, почему вы это сделаете.

1
ответ дан xnx 22 August 2018 в 01:34
поделиться

Нет, это невозможно. Результат оценки выражения передается функции, а не самому выражению. Вы будете обертывать свое утверждение функцией или выражением лямбда.

2
ответ дан Jaco 22 August 2018 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: