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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |