这并不是真正的问题,更多的是出于好奇。 我是python的新手,并且看到与C ++或Java相比,该语言非常简单,并且具有许多快捷方式。
那么有什么办法可以指向自己吗?让我澄清一下。例如,以下行:
line = line.lower()
是否有一种不用“ line =”部分的方法?有没有一种方法可以让功能/声明自行修改并将其设置为新值?我的灵感来自pycharm中的
自动填充文本line.lower(self)
我怀疑这是否可能,但是如果有人知道一种方法,那将非常酷。
答案 0 :(得分:1)
就地操作仅适用于list
之类的可变对象。与Java中一样,在Python中,字符串是不可变的类型。 line.lower()
操作将产生一个全新的独立字符串对象。如果没有something = ...
部分,您将失去对该新对象的引用,并且line
会很乐意继续绑定到原始大写字符串。如果您专门重新分配给line
而不是其他一些名称,则将该名称重新绑定到新的小写对象。在CPython中,这意味着您将减少原始行的引用计数器,并可能会对其进行垃圾回收。
话虽这么说,但没有什么可以阻止您编写行为符合您要求的类。可以通过维护对字符串的内部引用来使其可变。通过实现正确的dunder方法,您可以模拟str
的整个接口。这是一个玩具入门的局部示例:
class MyStr:
def __init__(self, s):
self.s = s
def __add__(self, s):
return MyStr(self.s + str(s))
def __iadd__(self, s):
self.s += str(s)
return self
def __str__(self):
return self.s
def __repr__(self):
return '{}({})'.format(type(self).__name__, self.s)
def lower(self):
return MyStr(self.s.lower())
def ilower(self):
self.s = self.s.lower()
...