Hay un lenguaje Ruby útil que usa tap
que le permite crear un objeto, hacer algunas operaciones en él y devolverlo (utilizo una lista aquí solo como ejemplo, mi código real es más complicado)):Ruby's tap idiom en Python
def foo
[].tap do |a|
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a << b
end
end
>> foo
=> [1]
con rieles hay un método similar llamado returning
, para que pueda escribir:
def foo
returning([]) do |a|
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a << b
end
end
que habla por sí mismo. No importa cuánto procesamiento haga en el objeto, aún está claro que es el valor de retorno de la función.
En Python tengo que escribir:
def foo():
a = []
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a.append(b)
return a
y me pregunto si hay una manera de puerto de este idioma de Ruby en Python. Mi primer pensamiento fue utilizar la declaración with
, pero return with
no es una sintaxis válida.
es interesante tener en cuenta que el ejemplo pitón tiene uno menos la línea. ¿Podría darnos un ejemplo ligeramente más profundo que muestre mejor qué está mal con el modo python? – aaronasterling
@ Aaron: ¿Tal vez para evitar crear una variable local explícitamente? – kennytm
Es una línea menos debido al 'fin's de Ruby. La diferencia está más en la intención, que creo que Ruby describe mejor. En Ruby, el código dice: "Devolveré * este * objeto pero haré * esas * cosas primero", mientras que en Python el código dice muy imperativamente "Creo este objeto, le hago esas cosas y luego devuélvalo ", que cuando tienes más de una operación puede ser un poco más difícil de detectar. –