缩短python“if”语句

时间:2012-09-04 01:38:46

标签: python if-statement

我一直在使用这种效率低下的样式在Python中进行编码

    checkbox = self.request.get(u'checkbox') # get data from a web form
    if checkbox == u'yes':
        someclass.enabled = True
    else:
        someclass.enabled = False

如何缩短这个?

9 个答案:

答案 0 :(得分:10)

someclass.enabled = self.request.get(u'checkbox') == u'yes'

答案 1 :(得分:4)

您可以在没有if声明的情况下执行此操作:

someclass.enabled = (checkbox == u'yes')

答案 2 :(得分:2)

您可以将值设置为语句的结果:

checkbox = self.request.get(u'checkbox') # get data from a web form
someclass.enabled = checkbox == u'yes'

答案 3 :(得分:2)

checkbox == u'yes'返回一个布尔值时,您可以直接将此结果分配给变量。

someclass.enabled = (checkbox == u'yes')

答案 4 :(得分:1)

也许您可以将其拆分为不同的功能:

def getCheckboxValue(name):
    return (self.request.get(name) == u'yes')

答案 5 :(得分:1)

Python评估语句并将输出返回给语句。所以你可以在右侧使用assign变量。

喜欢

variable = eval_statment

所以你的例子将是

someclass.enabled = self.request.get(u'checkbox') == u'yes'

答案 6 :(得分:1)

在你的例子中使用布尔值是不是很清楚,因为它们是你的问题所固有的,或者因为它们是一个方便的例子。如果你想分配比boole更复杂的变量,你可能还想看看Python的三元运算符(如果你使用的是2.5或更高版本):

someclass.int_val = 1 if checkbox == u'yes' else 2

转换为

if checkbox == u'yes':
    someclass.int_val = 1
else
    someclass.int_val = 2

对于布尔变量,我建议使用Yuushi的解决方案,但为了完整性,这就是它的样子:

someclass.enabled = True if checkbox == u'yes' else False

大约相同的打字量,但节省了一些垂直空间,这可能很有用。

答案 7 :(得分:0)

如果您需要超过布尔值,则应考虑使用调度模式:

targets = {
  'yes': do_yes,
  'no': do_no,
  'maybe': do_maybe,
}

targets[self.request.get(u'tricheckbox')]()

# where do_yes, do_no, and do_maybe are the functions to call for each state.

答案 8 :(得分:-1)

正如在另一个答案中指出的那样,您可以使用调度表根据值执行不同的操作。但是,使用字典的get()方法而不是\执行直接查找将允许您轻松处理没有匹配的情况。由于映射不会再次使用,因此它可以是临时的和匿名的。

这种方法非常通用,可以根据需要进行扩展,但通常需要编写额外的函数。因为后者,对于像你的例子这样的非常简单的案例,其中一个答案可能需要最少的努力。

def do_yes(): print 'do_yes'
def do_no(): print 'do_no'
def do_maybe(): print 'do_maybe'
def no_match(): print 'no_match'

{
  u'yes': do_yes,
  u'no': do_no,
  u'maybe': do_maybe,
}.get(self.request.get(u'checkbox'), no_match) ()