【发布时间】:2018-11-23 06:29:03
【问题描述】:
老实说,对我来说这个问题的标题并不容易,基本上有办法修改函数的返回值,同时在同一行中返回它。
示例 - 可迭代类的自定义实现
我想替换这个:
def __next__(self):
if self.count <= 0:
raise StopIteration
r = self.count
self.count -= 1
return r
有了这个:
def __next__(self):
if self.count <= 0:
raise StopIteration
return self.count -= 1
老实说,我知道这可能看起来很轻浮(可能是这样),但我之所以这样做,是因为我是单行字的粉丝,这归结为使即使像这样简单的过程在逻辑上更具可读性;另外,根据实现的不同,它将取消必须将值 r 保存在内存中(我知道我知道,消除对 r 的需要并没有显着的收益,但嘿我只是问这是否可能)。
我知道我只举了一个例子,但这恰好是我能想到的唯一一个需要这样的例子。 Python 是一种美妙的语言,充满了许多特殊的东西,比如 += 是 __iadd__ 的“包装器”,我的问题是我错过了什么吗?或者这是否可能......为什么必须将其用作单行而不是与 return 语句一起使用,因为它不会返回其更改后的值?
【问题讨论】:
-
“根据实现的不同,它会取消必须在内存中保存值 r” - 你真的不应该尝试基于这样的推测进行优化。事实上,不,它不会阻止必须将值保存在内存中,即使存在这样的语法。 (另外,在我知道
return x -= y语法存在的每种语言中,返回的值是减法之后的值,而不是之前的值。) -
另外,Python 3 上的方法是
__next__。 -
基本上,为什么
val += i不能返回它的改变值呢?在我看来这应该是可行的。 -
单行被高估了。在 Python 中,赋值不是表达式,所以你不能做那种事情。这是一个深思熟虑的设计决定,以防止 C 允许的难以阅读的嵌套赋值。
-
但是,我喜欢那些嵌套的作业。越短越好。无论哪种方式,我都没有兴趣,我只是更喜欢在更简单的任务上使用更短的代码
标签: python python-3.x