写这个if语句的更好方法是什么?

时间:2010-11-01 20:42:32

标签: python comparison

我有这个tkinter GUI,我需要从条目中获取值并进行比较。 self.hystInt.get()是访问Entry中字符串变量中字符串的方法。 *我必须为每个变量写这个,所以它最终看起来很难看。

if (self.hystInt.get().isdigit() and int(self.hystInt.get()) >= 200 and int(self.hystInt.get()) <= 500):

5 个答案:

答案 0 :(得分:10)

def validate(num):
    try:
        return 200 <= int(num) <= 500
    except ValueError:
        return False

简单就是好!

答案 1 :(得分:1)

至少你可以使用Python的不寻常的比较语法:

if (self.hystInt.get().isdigit() and (200 <= int(self.hystInt.get()) <= 500)):

答案 2 :(得分:1)

这样做。

try:
    hystInt= int(self.hystInt.get())
    if 200 <= hystInt <= 500:
        Valid.
    else:
        Out of bounds.
except ValueError, e:
    Not even a number.

答案 3 :(得分:1)

临时变量怎么样?我认为真正的问题(可读性和(非常!)性能上的差异)是你正在调用get()方法三次。

histint = self.hystInt.get()
if (histint.isdigit() and 
    (200 <= int(histint) <= 500))

答案 4 :(得分:0)

为了减少繁琐的编码,你可以按照这些方式做点什么:

valid_hystInt = lambda self, low, high: (
    self.hystInt.get().isdigit() and (low <= int(self.hystInt.get()) <= high)
)

class Class:
    hystInt = HystInt() # or whatever

    def some_method(self):
        if valid_hystInt(self, 200, 500):
            pass # use it

或者可能更为一般:

valid_int_field = lambda field, low, high: (
    field.get().isdigit() and (low <= int(field.get()) <= high)
)

class Class:
    hystInt = HystInt() # or whatever

    def some_method(self):
        if valid_int_field(self.hystInt, 200, 500):
            pass # use it