python - 是否可以在返回值的同时仍然修改它?

标签 python python-3.x

老实说,我没有简单的方法来表达这个问题的标题,基本上有没有一种方法可以修改函数的返回值,同时也在同一行中返回它。

示例 - 可迭代类的自定义实现

我想替换这个:

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/

相关文章:

python - 请解释这种意外的\b(退格)行为

python - 比较 python 中的事物

python-3.x - 无法使日期出现在 pyplot 中的 x 轴上

python-3.x - Google 云端硬盘文件流文件创建日期

python - 如何从图像中提取签名(Python脚本)?

python - 在 Python 2.7 中实现 Python 3 的 round 函数

python - 为什么打开终端时会调用 conda?

python - 在 pandas 中,如何选择包含 NaN 的行?

python-3.x - eli5解释预测XGBoost模型

python - Scrapy - 抓取多个项目