是否可以在修改值的同时返回值?

时间:2018-11-23 06:29:04

标签: 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语句一起使用,因为它不会返回其更改后的值?

2 个答案:

答案 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