Ruby在Python中的轻拍成语

前端之家收集整理的这篇文章主要介绍了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,etc.
    a << b
  end
end

这说明了一切.无论你对对象做了多少处理,它仍然清楚它是函数的返回值.

在Python中我必须写:

def foo():
  a = []
  b = 1 + 2
  # ... and some more processing,etc.
  a.append(b)
  return a

我想知道是否有办法将这个Ruby成语移植到Python中.我的第一个想法是使用with语句,但返回是无效的语法.

解决方法

您可以在Python中实现它,如下所示:
def tap(x,f):
    f(x)
    return x

用法

>>> tap([],lambda x: x.append(1))
[1]

然而,它在Python 2.x中的使用并不像在Ruby中那么多,因为Python中的lambda函数是非常严格的.例如,您无法内联调用print,因为它是一个关键字,因此您无法将其用于内联调试代码.您可以在Python 3.x中执行此操作,尽管它不像Ruby语法那样干净.

>>> tap(2,lambda x: print(x)) + 3
2
5

猜你在找的Ruby相关文章