Существует полезная идиома Ruby, использующая tap
, которая позволяет вам создавать объект, выполнять с ним некоторые операции и возвращать его (я использую список здесь только в качестве примера, мой реальный код больше участвует):
def foo
[].tap do |a|
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a << b
end
end
>> foo
=> [1]
В Rails есть аналогичный метод, называемый , возвращающий
, поэтому вы можете написать:
def foo
returning([]) do |a|
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a << b
end
end
, который говорит сам за себя. Независимо от того, сколько обработки вы выполняете над объектом, все равно ясно, что это возвращаемое значение функции.
В Python я должен написать:
def foo():
a = []
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a.append(b)
return a
и мне интересно, есть ли способ перенести эту идиому Ruby в Python. Моей первой мыслью было использовать с оператором
, но return с
не является допустимым синтаксисом.