import sys
from easygui import boolbox, choicebox
def reallyquit():
"Ask if the user wants to quit. If so, exit."
if __debug__:
print("really quit?")
answer = boolbox("Are you sure you want to Quit?")
if answer == 1:
sys.exit()
columns = ['adr1', 'adr2', 'spam', 'spam']
street = None
# ask for address until given or user decides to quit
while street is None:
street = choicebox("Street Address?", title, columns)
if street is None:
reallyquit()
В основной логики: Обычно вы бы не проверить, если значение равно None
, так как это синглтон (только один в системе, и все вхождения None
являются одной и той же логической None
). Таким образом, is None
- лучший тест. Я также использовал немного более форматирование кода Pythonic (пробелы после запятых в списке, имена переменных нижнего регистра) и порядок тестирования, который не дублирует вызов взаимодействия с пользователем.
Альтернативная форма предложенная Eric будет что-то вроде:
while True:
street = choicebox("Street Address?", title, columns)
if street is not None:
break
reallyquit()
Это имеет силу не повторять тест street is None
, но немного длиннее. Ваше предпочтение, для которого вариант кажется более четким и логичным, может отличаться.
Для подготовки: Импорт осуществляется из функций, а choicebox
импортируется там, где он ранее отсутствовал. Функция задается определяющей строкой комментария. Выполняется одно утверждение для каждого стандартного стандарта. И ненужный return
удален.
Это еще довольно грубая программа, но теперь она «более Pythonic».
Не должно быть подавляющим, но стандартом для внешнего вида Pythonic является PEP 8. Существуют такие инструменты, как pep8, которые вы можете установить для проверки соответствия. Более глубокая или «семантическая» часть Pythonic-кода выложена в PEP 20, также известном как «Zen of Python». К сожалению, нет никакого средства судить о соблюдении этих более глубоких принципов. Требуется опыт.
Я не вижу рекурсии. – sberry
Существует много непифонических аспектов вашего форматирования, и использование '== None:' также не является pythonic (используйте 'is None:' вместо этого). Пожалуйста, рассмотрите возможность проверки источника с помощью 'pep8' или' flake8'. Или прямо запускайте 'yapf' на источнике. – Anthon
Немного общих указателей: 1. Не импортируйте внутри функции, если это не требуется (что редко, но это происходит), сохраните свой импорт в верхней части файла. 2. Вам не нужно «возвращать» в конце функции 'reallyquit', поскольку функции Python возвращают None по умолчанию. 3. Отступ (и проверьте форматирование) вашего кода на SO. 4. Что сказал @ Энтон. – sberry