我不得不转向Python将代码集成到现有的Python代码中。我忽略或者似乎不存在的事情之一是能够在对象本身上执行替换。
例如,我会做的一件好事就是这样:
textstring = "I am the walrus"
textstring.gsub!(/am/,"was")
然后使texttring本身成为全局替换的对象,而不是:
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模块执行此操作的方法。但我确信我只是忽略了一些东西。
答案 0 :(得分:6)
这在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