在Python中,有没有一种方法可以将结果分配给变量并立即打印它?换句话说,我正在寻找一行代码来实现以下等效的操作:
a = something()
print(a)
(仅一次,不应自动打印每个任务)。
有一些REPL,例如Scala,可以自动完成此操作:
scala> val count = 1
count: Int = 1
a = something()
print(a)
(仅一次,不应自动打印每个任务)。
有一些REPL,例如Scala,可以自动完成此操作:
scala> val count = 1
count: Int = 1
从Python 3.8开始,这个问题的答案已经改变了。
现在,你可以使用“赋值表达式”(口语化地称为“海象运算符”)将一个值分配给一个变量,并返回相同的值。
因此,下面的代码是合法的Python代码:
print("Hello, {}".format((w := "world"))
以下一行代码既可以输出 "Hello, world"
,又可以将字符串 "world"
赋值给变量 "w"
。
从技术上讲,这是一行代码:
a = something(); print(a)
如果您只想创建一个新变量并打印该变量的值,就像您向我们展示的那样,您可以编写一个简单的函数来打印并返回该值:
def print_and_return(value):
print(value)
return value
现在,您可以像这样使用它:
>>> a = print_and_return(5)
5
>>> print(a)
5
另一种方法,你永远不应该使用,就是使用 globals()
字典。
def print_and_set(name, value):
globals()[name] = value
print(globals()[name])
现在您可以使用以下方式调用它:
print_and_set('a', 5)
它将打印5
,并且您还可以访问全局命名空间中的变量a
。
print(a := something())
if a=30 { ... }
因为任何赋值语句都会有被分配的值,这可能会让第一次看到代码的人感到困惑。>>> import sys
>>> a = sys.stdout.write("hello")
hello
>>> print(a)
5
正如您所看到的,您可以通过向标准输出写入(本质上与print()相同)字符串并将字符串的长度分配给变量 - 而不是字符串本身。
;
分隔而不是\n
)。 - Markus Meskanensomething
是一个类吗?还是一个函数? - veggie1syscall
打印(本质上就是当你使用print()
时发生的事情)无法同时完成更改值(设置变量)。 - Chris Sprague(x = 1)
打印并分配x
。因此,来自R的人,特别是像在Jupyter中交互式使用Python的人,可能会期望并受益于此。但无论如何,似乎没有任何非hacky方式支持它。 - Max Ghenis