我一直在使用这种效率低下的样式在Python中进行编码
checkbox = self.request.get(u'checkbox') # get data from a web form
if checkbox == u'yes':
someclass.enabled = True
else:
someclass.enabled = False
如何缩短这个?
答案 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) ()