有没有一个相当于Ruby自我的Python(!)?



我不得不迁移到Python,将代码集成到一些现有的Python代码中。我忽略或似乎不存在的一件事是能够对对象本身执行替换。

例如,我会做的一件常见事情是这样的:

textstring = "I am the walrus"
textstring.gsub!(/am/,"was")

然后使文本字符串本身成为全局替换的对象,而不是:

newtextstring = textstring.gsub(/am/,"was")

2.4.0 :005 > textstring = "I am the walrus"
 => "I am the walrus" 
2.4.0 :005 > newtextstring = textstring.gsub(/am/,"was")
 => "I was the walrus" 
2.4.0 :006 > puts textstring
I am the walrus
 => nil 
2.4.0 :007 > puts newtextstring
I was the walrus

我还没有找到使用 Python re 模块执行此操作的方法。但我确定我只是忽略了一些东西。

这在Python中是不可能的,因为与Ruby相反,字符串是不可变的。

一般来说,如果一个对象具有更改其数据的方法,那么它被认为是可变的。许多内置对象是可变的,突变是通过方法调用调用的,这在 Python 中不需要特殊的运算符。

示例 1:从列表中删除最后一项。

>>> mylist = [1,2,3]
>>> mylist.pop()
3
>>> mylist
[1, 2]

示例 2:sorted返回一个新列表,list.sort就地对列表进行排序。

>>> mylist = [5, 4]
>>> sorted(mylist)
[4, 5]
>>> mylist
[5, 4]
>>> mylist.sort()
>>> mylist
[4, 5]

您只需要知道哪些函数/方法可以就位或阅读文档。

可变对象的方法是否总是就地运行?目前似乎想不出反例。

但是有很多。

>>> mylist.__add__(mylist) # mylist + mylist
[4, 5, 4, 5]
>>> mylist
[4, 5]
# mylist[:] is mylist
>>> mylist.__getitem__(slice(None, None, None)) is mylist
False

最新更新