灵活的内联变量赋值
我想在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