说实话,对于我来说,敲定这个问题的标题绝非易事,基本上,有一种方法可以修改函数的返回值,同时在同一行中将其返回。
示例-可迭代类的自定义实现
我想替换为:
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语句一起使用,因为它不会返回其更改后的值?
答案 0 :(得分:1)
return foobar -= 1
或
>>> a = 3
>>> b = (a += 1)
File "<stdin>", line 1
b = (a += 1)
^
SyntaxError: invalid syntax
在Python中是不可能的。
尽管第一个解决方案需要为此时间步长存储一个变量(或执行一个操作),但要引用Python Zen:可读性。
答案 1 :(得分:1)
这是因为-=
修改了变量,并且对此进行了任何处理(就像现在返回的那样)都会引发错误。
演示:
>>> a=3
>>> a+(a+=1)
SyntaxError: invalid syntax
>>> # also to show that it does modify the variable:
>>> a=3
>>> a+=1
>>> a
4
>>>
更新:
您采用两线制:
def f(a):
if a<=0:raise StopIteration
a-=1;return a