1

我似乎记得三元运算符测试存在的缩写。例如:

a = None
b = a if a else 'Not None!'
# b is now 'Not None!'

我以为是这样的

a else 'Not None!'

但这不起作用。也许还有另一种使用其他内置类型来缩写它的方法?

4

3 回答 3

3

不,没有可用的缩写。

你是不是在想a or 'Not None!'呢?

附带说明:... if ... else ...被称为条件表达式;它是一个三元运算符,但 SQLBETWEEN ... IN ...表达式也是如此。

于 2013-03-20T21:44:42.980 回答
1

是的,在你的情况下有一个缩写。

b = a or 'Not None!'

几乎等于

b = a if a else 'Not None!'

唯一的区别是a在第一种情况下评估一次,在第二种情况下评估两次。在任何一种情况下,放入的值b都是相同的。

此外,请意识到在任一代码中,如果a不是 None,但仍然是 False-y,您可能会得到意想不到的结果。例如,考虑如果ais会发生什么0.0

于 2013-03-20T21:52:52.123 回答
0

这对我来说真的没有意义

a = None
b = a if a else 'Not None!'

您将 b 设置为(包括)Not None!的任何错误值aNone

也许你在想

a = None
b = 'Not None!' if a is None else a

或者其他的东西?

无论如何,除了你可以逃脱的情况

b = a or 'Not None!'

或者

b = a and 'Not None!'

没有办法避免提及a两次

于 2013-03-20T22:48:07.437 回答