在python表达式中嵌入方程式

时间:2013-04-01 21:35:47

标签: python expression

我偶尔使用Python,有没有办法让这种语法起作用?

import math

print (value1 = math.factorial(5))

这给出了错误:

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

SyntaxError:语法无效

或者我必须做很长的事情吗?

import math

value1 = math.factorial(5)
print value1

5 个答案:

答案 0 :(得分:4)

您无法在表达式中嵌入作业。表达/声明的区别是Python设计的基础,如果你问Guido如何做你想做的事,他会告诉你用两行来做。或者,更好的是,升级另一个级别,看看是否有另一种方法来做你想做的事情。

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

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

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

for line in f:
    # do something with line

常见问题解答还承认,这使得从C和Perl等语言逐行翻译变得更加困难,并解释了为什么这对Python来说是好事而不是消极的。

话虽如此,有些方法可以伪造它,使用闭包或nonlocal变量。例如:

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

print(set_value1_to(math.factorial(5))

然而,很难想象这是一个正确的解决方案。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

不,没有。您无法在作业发生时打印作业的结果。

答案 3 :(得分:0)

无法从赋值运算符中提取值,但如果必须在一行中绝对执行,则可以编写一个对象,其setter将存储接收到的值将其返回:

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的约定,这些约定适用于setter(以及其他类型的mutator,例如set.discardlist.sort)以返回None

答案 4 :(得分:0)

请注意,如果您要做的只是使用表达式而不将其分配给您永远不会重复使用的变量,那么Python会让您执行print math.factorial(5)之类的操作。