灵活的内联变量赋值

7 投票
4 回答
12639 浏览
提问于 2025-04-18 13:21

我想在Python中灵活地给一个变量赋值,不管这个变量在我的代码中的哪个地方。

比如说,我在一个if语句里有一个变量x

if(x == 5):
    print "that's odd."
else:
    print "Woot."

我希望能直接在if语句里给x赋值,像这样:

if((x=3) == 5):
    print "that's odd."
else:
    print "Woot."

这样做可以吗?再举个例子。假设我有一行代码是:

y = x + 10

我想在这里给x赋值:

y = (x=3) + 10

所以我在寻找一种方法,可以在我的代码中找到一个变量并给它赋值。有没有什么Python的语法可以做到这一点?

4 个回答

0

Python不支持内联赋值。这是为什么呢?因为在Python中,所有东西都是对象,而对象应该是可以调用的。举个例子:

在Python中,这种写法是不允许的:

if ((x=10) > 20):

这里我们试图把x赋值为Int类的一个实例,并在if表达式中执行它。

虽然在C/C++中这样的写法是可以的,因为这两种语言的设计思路不同。

1

globals().setitem('a',1) 或者 a

这有点小技巧,

但有两件事是可以做到的:

1. 通过 locals() 或 globals() 函数来声明或赋值一个变量。

2. 使用 or 来连接一个就地函数(这个函数返回 None)。

我怀疑使用这两种方法是否算是好习惯,但它们确实是可以用的。

6

在Python中,赋值是一个语句,而不是一个表达式,因此不能在任意表达式中使用。这意味着一些在C语言中常见的写法,比如:

while (line = readline(file)) {
    ...do something with line...
}

或者

if (match = search(target)) {
    ...do something with match...
}

不能直接在Python中使用。

http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm

19

在Python 3.8及以上版本中,你可以使用一种叫做“赋值表达式”的新功能(符号是:=)。

if (x := 3) == 5:
    print("that's odd")

y = (x := 3) + 10

撰写回答