加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby在Python中的轻拍成语

发布时间:2020-12-16 19:06:48 所属栏目:百科 来源:网络整理
导读:有一个有用的 Ruby习惯用法使用tap,它允许你创建一个对象,对它做一些操作并返回它(我在这里只使用一个列表作为例子,我真正的代码更多参与): def foo [].tap do |a| b = 1 + 2 # ... and some more processing,maybe some logging,etc. a b endend foo= [1]
有一个有用的 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读