Идиома касания Ruby в Python

Существует полезная идиома 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 с не является допустимым синтаксисом.

11
задан Michał Kwiatkowski 16 September 2010 в 11:14
поделиться