我偶尔会使用 Python,有什么方法可以让这种语法起作用吗?
import math
print (value1 = math.factorial(5))
这给出了错误:
print (value1 = math.factorial(5)) ^
SyntaxError:无效的语法
还是我必须走很长的路?
import math
value1 = math.factorial(5)
print value1
我偶尔会使用 Python,有什么方法可以让这种语法起作用吗?
import math
print (value1 = math.factorial(5))
这给出了错误:
print (value1 = math.factorial(5)) ^
SyntaxError:无效的语法
还是我必须走很长的路?
import math
value1 = math.factorial(5)
print value1
您不能在表达式中嵌入赋值。表达式/语句的区别是 Python 设计的基础,如果你问 Guido 如何做你想做的事,他会告诉你用两行来做。或者,更好的是,提升一个级别,看看是否有另一种方法可以做你想做的事情。
例如,在表达式中分配变量的最常见原因是为了简化while
orfor
循环。在 Python 中,您通常只想将其转换为迭代器上的for
循环,而不是围绕从迭代器获取下一个值的while
or循环。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))
但是,很难想到这将是正确的解决方案。
不,Python 不允许这样做。赋值只是一个语句,不能嵌入到表达式中。
不,没有。您不能在分配结果发生时打印它。
不可能从赋值运算符中提取值,但如果您必须在一行中完成,您可以编写一个对象,其设置器将存储接收到的值并返回它:
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.discard
or list.sort
)返回None
。
请注意,如果您只想使用一次表达式而不将其分配给您永远不会重用的变量,Python 确实允许您执行print math.factorial(5)
.