0

我偶尔会使用 Python,有什么方法可以让这种语法起作用吗?

import math

print (value1 = math.factorial(5))

这给出了错误:

print (value1 = math.factorial(5))
              ^

SyntaxError:无效的语法

还是我必须走很长的路?

import math

value1 = math.factorial(5)
print value1
4

5 回答 5

4

您不能在表达式中嵌入赋值。表达式/语句的区别是 Python 设计的基础,如果你问 Guido 如何做你想做的事,他会告诉你用两行来做。或者,更好的是,提升一个级别,看看是否有另一种方法可以做你想做的事情。

例如,在表达式中分配变量的最常见原因是为了简化whileorfor循环。在 Python 中,您通常只想将其转换为迭代器上的for循环,而不是围绕从迭代器获取下一个值的whileor循环。for

这在官方 Python 设计和历史常见问题解答中进行了讨论,在Why can't I use an assignment in an expression下,明确给出了这个例子:

while (line = readline(f)) {
    // do something with line
}

for line in f:
    # do something with line

FAQ 还承认这使得从 C 和 Perl 等语言“逐行”翻译变得更加困难,并解释了为什么这对 Python 来说是一件好事而不是负面的。

话虽如此,您可以使用闭包或nonlocal变量来伪造它。例如:

def set_value1_to(new_value):
    global value1
    value1 = new_value
    return value1

print(set_value1_to(math.factorial(5))

但是,很难想到这将是正确的解决方案。

于 2013-04-01T21:38:15.333 回答
2

不,Python 不允许这样做。赋值只是一个语句,不能嵌入到表达式中。

于 2013-04-01T21:38:07.090 回答
0

不,没有。您不能在分配结果发生时打印它。

于 2013-04-01T21:38:05.620 回答
0

不可能从赋值运算符中提取值,但如果您必须在一行中完成,您可以编写一个对象,其设置器将存储接收到的值返回它:

class AssignExpr(object):
    def set(self, value):
        self.value = value
        return value
assign = AssignExpr()

print assign.set(math.factorial(5))
# result available as assign.value

请注意,这违反了 Python 的约定,即设置器(和其他类型的修改器,例如set.discardor list.sort)返回None

于 2013-04-01T21:44:16.377 回答
0

请注意,如果您只想使用一次表达式而不将其分配给您永远不会重用的变量,Python 确实允许您执行print math.factorial(5).

于 2013-04-01T21:49:47.287 回答