在Python中同时进行变量赋值和打印输出

4
在Python中,有没有一种方法可以将结果分配给变量并立即打印它?换句话说,我正在寻找一行代码来实现以下等效的操作:
a = something()
print(a)

(仅一次,不应自动打印每个任务)。

有一些REPL,例如Scala,可以自动完成此操作:

scala> val count = 1
count: Int = 1

1
是的,但并非以理智的方式(除了@ScottHunter的答案,该答案仅是两行用;分隔而不是\n)。 - Markus Meskanen
something 是一个类吗?还是一个函数? - veggie1
你在这里需要多精确的结果?在最低层级别上,一个syscall打印(本质上就是当你使用print()时发生的事情)无法同时完成更改值(设置变量)。 - Chris Sprague
1
你为什么一开始就想要这个?我认为这可能是一种XY问题,那两行代码解决方案有什么问题吗? - Markus Meskanen
这只是因为我发现自己经常写这个组合。我想知道是否有更短的方法。 - Socci
2
一些背景:这是R中相对常见的技术,可以通过在赋值周围放置括号来实现,例如(x = 1)打印并分配x。因此,来自R的人,特别是像在Jupyter中交互式使用Python的人,可能会期望并受益于此。但无论如何,似乎没有任何非hacky方式支持它。 - Max Ghenis
6个回答

6

从Python 3.8开始,这个问题的答案已经改变了。

现在,你可以使用“赋值表达式”(口语化地称为“海象运算符”)将一个值分配给一个变量,并返回相同的值。

因此,下面的代码是合法的Python代码:

print("Hello, {}".format((w := "world"))

以下一行代码既可以输出 "Hello, world",又可以将字符串 "world" 赋值给变量 "w"

```python print("Hello, world", w := "world") ```

做得好......! - God Is One

4

从技术上讲,这是一行代码:

a = something(); print(a)

鉴于问题的模糊性,我认为这个答案是合理的。 - Chris Sprague
为什么会有人点踩?这是一个有效的回答,而且问题也不是我读过的最不清晰的。 - omu_negru

4

如果您只想创建一个新变量并打印该变量的值,就像您向我们展示的那样,您可以编写一个简单的函数来打印并返回该值:

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


3

1
这在Python中是不存在的,我认为这是有道理的。在C语言中,你可以有一个有效的语句,例如: if a=30 { ... } 因为任何赋值语句都会有被分配的值,这可能会让第一次看到代码的人感到困惑。
此外,自己编写分配函数也会有问题,因为在函数体内你得到的是引用副本而不是实际变量。
简而言之,答案是否定的。

-1
从技术上讲,你可以使用sys在同一行上“打印”并赋值。 请参考以下内容:
>>> import sys
>>> a = sys.stdout.write("hello")
hello
>>> print(a)
5

正如您所看到的,您可以通过向标准输出写入(本质上与print()相同)字符串并将字符串的长度分配给变量 - 而不是字符串本身。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接