老实说,我没有简单的方法来表达这个问题的标题,基本上有没有一种方法可以修改函数的返回值,同时也在同一行中返回它。
示例 - 可迭代类的自定义实现
我想替换这个:
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 语句结合使用,因为它不返回其更改后的值?
最佳答案
这是因为 -=
修改了变量,并对它执行任何操作(就像现在您返回的那样)都会引发错误。
演示:
>>> 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
关于python - 是否可以在返回值的同时仍然修改它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53441591/