Лучший способ написать это, если заявление? - PullRequest
2 голосов
/ 01 ноября 2010

У меня есть этот графический интерфейс tkinter, и мне нужно получить значения из записей и сравнить.self.hystInt.get() - это способ доступа к строке в строковой переменной в Entry.* Я должен написать это для каждой переменной, чтобы она выглядела ужасно.

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

Ответы [ 5 ]

10 голосов
/ 01 ноября 2010
def validate(num):
    try:
        return 200 <= int(num) <= 500
    except ValueError:
        return False

Простое - это хорошо!

1 голос
/ 02 ноября 2010

Как насчет временной переменной?Я думаю, что реальная проблема (как в читабельности, так и (очень!) Незначительной производительности) заключается в том, что вы вызываете метод get() три раза.

histint = self.hystInt.get()
if (histint.isdigit() and 
    (200 <= int(histint) <= 500))
1 голос
/ 01 ноября 2010

Сделай это.

try:
    hystInt= int(self.hystInt.get())
    if 200 <= hystInt <= 500:
        Valid.
    else:
        Out of bounds.
except ValueError, e:
    Not even a number.
1 голос
/ 01 ноября 2010

По крайней мере, вы можете использовать необычный синтаксис сравнения Python:

if (self.hystInt.get().isdigit() and (200 <= int(self.hystInt.get()) <= 500)):
0 голосов
/ 02 ноября 2010

Чтобы уменьшить утомительное кодирование, вы можете сделать что-то вроде этого:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...