作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这并不是真正的问题,更多的是出于纯粹的好奇心。我是 python 的新手,发现与 C++ 或 Java 相比,这种语言非常简单,并且有很多快捷方式。
那么有没有办法让某个东西指向它自己呢?让我澄清一下。例如,以下行:
line = line.lower()
有没有办法去掉“line =”部分?有没有办法让函数/语句修改自身并将其设置为新值?我的灵感来自于 pycharm 中的自动填充文本,上面写着
line.lower(self)
我怀疑这是可能的,但如果有人可能知道一种方法,那就太酷了。
最佳答案
就地操作仅适用于 list
等可变对象。在 Python 中,就像在 Java 中一样,字符串是一种不可变类型。操作line.lower()
生成一个全新的、独立的字符串对象。如果没有 something = ...
部分,您将丢失对此新对象的引用,并且 line
会很乐意继续绑定(bind)到原始大写字符串。如果您专门重新分配给 line
而不是其他名称,则会将该名称重新绑定(bind)到新的小写对象。在 CPython 中,这意味着您将减少原始行的引用计数器,并可能对其进行垃圾收集。
话虽如此,没有什么可以阻止您编写一个按您想要的方式运行的类。可以通过维护对字符串的内部引用来使其可变。通过实现正确的 dunder 方法,您可以模拟 str
的整个接口(interface)。这是一个帮助您入门的部分玩具示例:
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()
...
关于python - 有没有办法将函数/语句指向自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575288/
我是一名优秀的程序员,十分优秀!