假设:
variableX = 5
someValueY = 6
想象一下,您想要variableX
分配variableX
和someValueY
的最大值:
variableX = max(variableX, someValueY)
我不止一次认为有这样的东西会很好:
variableX max= someValueY
与+=
和其他作业运营商相媲美。
这是一个好主意,它是否已经存在并且不是这个Pythonic?
答案 0 :(得分:2)
根据language reference,"扩充分配" :
是单个语句中二元操作和赋值语句的组合
(强调我的)。 max
不是二进制操作(它需要任意数量的位置参数加上key
关键字参数),因此您提出的运算符与现有套件不一致。你可能也想要min=
,但the other built-in functions呢?
在实现级别,请注意此提议意味着在解析Python代码时添加一整层复杂性;如果名称恰好是max
(或min
,或者您想要提供的任何其他内容),或者任何名称将被视为相同,则解析时会有一些异常方式,即:
foo func= bar
只是语法糖:
foo = func(foo, bar)
(或func(bar, foo)
;如果该功能不是commutative怎么办?)
在评论中,你提到x max= y, z
将成为x = max(x, y, z)
,所以第二个参数是一个被解包的元组,例如:
foo func= bar
将被翻译为:
foo = func(foo, *bar)
(这意味着单个值需要尾随逗号:x max= y,
),或者我们正在实施更多新语法。
这在实现,测试和维护方面付出了很多努力(更不用说初学者在阅读Python代码之前需要学习的另一件事)。向语言添加新语法必须始终具有非常强大的案例,并且the Zen of Python(import this
):
应该有一个 - 最好只有一个 - 明显的做法。
"一种显而易见的方式" 是现有语法foo = func(foo, bar)
。根据{{3}}
Python中增强赋值背后的想法是它不仅仅是 一种更简单的方法来编写存储结果的常用做法 二进制操作在其左侧操作数中,也是一种方式 有问题的左手操作数知道它应该操作 本身'而不是创建自己的修改副本。
为了适用于max=
,我们现在必须允许对象实现,例如__imax__
(参见__iadd__
的{{1}}),这意味着还有一个常规的+=
方法,可能会导致任意__max__
和{{1}方法,这是另一种蠕虫病毒。我想的越多,看起来就越糟糕......
在一个类中,您可以使用描述符来实现它,以设置特定属性的最大值和最小值;见例如relevant PEP
答案 1 :(得分:0)
你所要求的基本上与:
相同 为什么我们不能x++
增加x
?
答案也基本相同:
我们可以,但这些好处并不值得所需的工作量和可维护性。
-
更新:回答问题的一部分,询问它是否已存在? - 否。