在Ruby中,可以将这样的方法链接在一起:
a = [2,3,1]
b = a.sort.reverse
它将变量b的值设置为[3,2,1],同时保留相同的值.
我想在Python中执行类似的操作.到目前为止,我发现最短的方法是:
import copy
a = [2,3,1]
b = copy.copy(a)
b.sort()
b.reverse()
也就是说,用5行代码而不是2行.真的没有更简单的方法吗?
解决方法:
澄清:原始答案如下.正如评论的那样,问题在于一般情况下的链接,而不是任何特定情况.在这个答案的最后可以找到对此的澄清.
你可以直接写下来.
a = [2,3,1]
b = sorted(a, reverse=True)
即使你只想使用方法,你也可以这样做:
a = [2,3,1]
b = a.copy() # a[:] in python2
b.sort(reverse=True)
Python倾向于对隐式克隆相当挑剔.复制引用很便宜,复制对象很昂贵.由于许多python类型是可变的,因此当事务被克隆(或不克隆)时,很容易引入细微的错误.因此,大多数接口都需要您明确克隆事物.
python中的链接方法是可能的.但是,链仅适用于先前方法(或函数)调用返回的对象.
基本上,链接方法调用就像链接函数.
foo = they.method.method.method()
foo = my_func(your_func(their_func()))
让我们考虑[2,3,1] .sort().reverse().这实际上相当于以下内容:
a = [2,3,1]
b = a.sort()
c = b.reverse()
由于s.sort()返回None,第三行将调用None.reverse() – 它没有为None定义.
不可变类型通常在这里表现得更好.例如,无法在原地修改字符串 – 它们的方法返回新字符串.从而,
s = "ab:cd".upper().center(20).partition(':')
print(s)
给出(‘AB’,’:’,’CD’).
原文地址:https://codeday.me/bug/20190623/1268405.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。