gpt4 book ai didi

python - 有没有办法将函数/语句指向自身?

转载 作者:行者123 更新时间:2023-12-01 07:02:29 25 4
gpt4 key购买 nike

这并不是真正的问题,更多的是出于纯粹的好奇心。我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com