gpt4 book ai didi

python - 对象方法赋值运算符概念的可能性

转载 作者:行者123 更新时间:2023-11-28 21:39:51 25 4
gpt4 key购买 nike

设:a = 5b = 10hello_world = 'Hello World'

据我了解:Python 允许我们利用赋值运算符来避免重复左操作数。例如,a = a + b 可以重写为 a += b,其中两者都将返回 15

因此对于某些 Python 对象,它可能有些相似,具体取决于被调用的方法返回的内容。

对于字符串 str,或者在本例中我们的字符串 hello_world,您可以使用多种方法以某种方式修改它,例如 hello_world.lower() 有时我会调用它来为变量分配方法的结果。例如,hello_world = hello_world.lower() 可以重写为类似 hello_world .= lower() 的内容,其中两者都将返回 hello world

Python 中有类似的东西吗?这对你来说是完全荒谬还是令人困惑?很好奇人们对此有何看法和/或它是否已经存在。

最佳答案

Is there anything like this available in Python?

没有

Is this completely absurd or confusing to you?

没有。也就是说,它与现有的扩充赋值运算符(如 +=*= 等)有些不同。对于那些运算符,你可以定义一个特殊的魔法方法(__iadd____imul__等)来实现它们。这些的一个关键特征是,因为调用了一个单独的方法,所以它们可以就地更新对象。例如,如果 x 是一个列表,那么 x += [1, 2, 3] 实际上会改变对象 x 而不是创建一个新列表。

对于您提议的 .= 运算符,尚不清楚它是如何工作的。如果有一个 __imeth__ 运算符用于“增强方法赋值”,它会接受什么作为参数?如果它将方法的名称作为参数,则需要在 __imeth__ 中使用一个巨大的 if block 来决定对各种方法执行的操作(即 if method == 'lower' 来处理 .lower() 等等)。如果它不将方法的名称作为参数,它怎么知道正在调用什么方法?

不过,更重要的是,现有运算符的一个基本特征是它们接受一个表达式 作为它们的操作数。对于您提出的 .=,如果您执行 x .= 3 会发生什么?或者 x .= (foo+bar).blah()/7?或者甚至 x .= lower(没有括号)? .= 似乎要求其右侧参数语法上仅限于单个函数调用(这将被解释为方法调用)。这与任何现有的 Python 运算符都大不相同。

似乎处理所有这些问题的唯一方法是缩小提案的范围,使其确实只接受右侧的单个函数调用,并使其不可定制,这样 x 。 = method(...)x = x.method(...) 的纯语法糖。但是,如上所述,这比当前增强赋值所允许的要弱得多,所以我认为这不会是一个巨大的胜利。

关于python - 对象方法赋值运算符概念的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257172/

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