使用比较运算符的Python条件变量赋值

时间:2015-07-08 16:49:50

标签: python django

我正在浏览django休息框架工作教程

http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

在教程中有一行作者执行以下任务。

    linenos = self.linenos and 'table' or False
    options = self.title and {'title': self.title} or {}

我从来没有见过这种形式的条件赋值......我甚至都不确定。 我觉得在python中进行条件格式化的唯一方法是

var = something if something something_else

那么,床单和选项究竟会回归什么?

1 个答案:

答案 0 :(得分:4)

代码正在利用逻辑运算符在python中的工作方式。语句从左到右解释,最后要评估的表达式提供结果。 andor运算符也“短路”,这意味着如果第一个参数为假,它们只会评估它们的第二个参数。

可以利用这些功能来创建三元运算符(Python在2.5版之前没有 - 请参阅PEP 308 -- Conditional Expressions)。所以问题中的两行代码相当于:

    linenos = 'table' if self.lineno else False
    options = {'title': self.title} if self.title else {}