给予:
variableX = 5
someValueY = 6假设要向variableX分配variableX和someValueY的最大值
variableX = max(variableX, someValueY)我不止一次地想,有这样的东西会很好:
variableX max= someValueY可与+=和其他赋值运算符相比较。
这是个好主意,它已经存在了吗,这不是毕多尼吗?
发布于 2015-01-04 11:05:07
根据语言参考,“增广赋值”
是、二进制操作和赋值语句在单个语句中的组合。
(强调我的)。max不是二进制操作(它需要任意数量的位置参数加上key关键字参数),因此您的建议操作符将与现有的套件不一致。你大概也想要min=,但是其他内置函数呢?
在实现级别上,请注意,这一建议将意味着为Python代码的解析增加整个层的复杂性;如果名称碰巧是max (或min,或您希望提供的任何其他名称),则解析过程中会有一些例外,或者任何名称都将被以相同的方式对待,即:
foo func= bar只是句法上的糖:
foo = func(foo, bar)(或者func(bar, foo)__;如果函数不是http://en.wikipedia.org/wiki/Commutative_property怎么办?)
在注释中,您提到x max= y, z将变成x = max(x, y, z),所以第二个参数要么是一个可以打开的元组,例如:
foo func= bar将翻译为:
foo = func(foo, *bar)(这意味着一个值:x max= y,需要一个后缀逗号),或者我们正在实现更多的新语法。
这在实现、测试和维护方面付出了很大的努力(更别提初学者在阅读Python代码之前要学习的另一件事了)。向语言添加新语法必须始终有非常强的大小写,并且,按照Python的禅宗 (import this):
应该有1,最好只有一种--很明显的方法。
“一个显而易见的方法”是现有的语法,foo = func(foo, bar)。这不适用于现有的套件,因为根据相关PEP
Python中增广赋值的思想是,它不仅仅是将二进制操作的结果存储在其左手操作数中的一种更简单的方法,而且也是一种让所讨论的左操作数知道它应该‘对自己’操作,而不是创建自己的修改副本的方法。
要将其应用于max=,我们现在必须允许对象实现,例如,__imax__ (c.f )。__iadd__ for +=),这意味着也有一个常规的__max__方法,并可能导致任意的__func__和__ifunc__方法,这是又一种蠕虫。我想得越多,这个主意就越糟.
在类中,可以使用描述符来实现这一点,以设置特定属性的最大值和最小值;例如,请参见实现一个装饰器来限制设置器。
发布于 2015-01-04 11:05:32
你想要的基本上是:
为什么我们不能做x++ 来增加 x
答案基本上是一样的:
我们可以,但好处不值得工作量和可维护性所需。
--
更新:回答你问题中已经存在的部分吗?- No。
https://stackoverflow.com/questions/27764828
复制相似问题