Комментарии не относятся к коду, я так написал мысли читающего код. Проблема в том что когда у нас более сложные условия в такой вот булевой функции, приятное если в проверках всегда возвращается False, а если все проверки провалены — True, или наоборот. Если проверки возвращают то одно то другое и вдруг функция не дает ожидаемый результат — отладка становится сложнее.
Подскажите, пожалуйста, что делать с подобным кодом? Такое нечитабельно, но вложенные или сложные условия в разы хуже.
def has_access(user) -> bool:
if not user.is_authenticated():
return False
# пока что все понятно, функция проверяет не надо ли пользователю доступ
# закрыть, и если все проверки провалятся, то она, видимо, вернет True
if user.is_superuser():
return True
# а нет, всё плохо. Чтобы понять что функия вернет, мне надо
# вчитываться в каждое условие и что при этом возвращается
if user.has_children():
return False
# окей, видимо, проверка на суперпользователя была исключением,
# сейчас все пойдет как надо
if not user.has_active_subscription():
return True
if user.is_baba_tanya():
return False
# ААА! Я запутался.
return True
# вроде False будет если не залогинен или
# не суперпользователь или с подпиской? Надо перечитать
1) Как-то не раскрыто, что `type` может вам помогать в качестве валидатора, кроме как для приведения значения в тот вид что вам нужен
import os
import argparse
def validate_path(path: str) -> str:
if not os.path.isabs(path):
raise argparse.ArgumentTypeError(f'Absolute path required, got "{path}"')
return os.path.normpath(path)
parser.add_argument('--path', metavar='PATH', type=validate_path)
2) Если хотите чтобы параметры по умолчанию отображались в помощи, можно использовать такой ArgumentParser
import argparse
import typing
class RawTextArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter):
'Adds default arguments to parser help output'
def _get_help_string(self, action: argparse.Action) -> str:
help_str = action.help or ''
if 'default: ' in help_str or action.default is argparse.SUPPRESS or action.default is None or action.default is False:
return help_str
if not action.option_strings and action.nargs not in [argparse.OPTIONAL, argparse.ZERO_OR_MORE]:
return help_str
return f'{help_str} (default: {action.default})'
class ArgumentParser(argparse.ArgumentParser):
'`argparse.ArgumentParser` that shows default values in help message.'
def __init__(self, **kwargs: typing.Any) -> None:
kwargs['formatter_class'] = RawTextArgumentDefaultsHelpFormatter
super(ArgumentParser, self).__init__(**kwargs)
В детстве я достаточно много времени залипал в комп, и вот что из этого вышло. Благодаря игре TES III: Morrowind я набрал достаточно хороший словарный запас в английском, плюс засчет встроенного редактора получил начальные навыки программирования. Так как мы часто играли в друзьями в Re-Volt, который был ужасно локализован, я научился делать спрайты, чтобы русский шрифт смотрелся нормально. Игра Stranded II научила меня основам Lua. В Starcraft я научился делать простые скрипты для создания кастомной карты.
Сейчас я работаю программистом и так или иначе использую навыки полученные тогда. Вот так игры отрицательно влияют на детей.
Согласен, а еще Амазону стоило бы запретить открывать порты кроме 80 на виртуалках. И специальный бот должен проверять что на 80 порту виртуалка отдает HTTP контент, а иначе виртуалку банят сразу.
Еще лучше бы конечно разрешить запускать только специально созданный амазоном образ виртуалки и запретить пользователю его менять, дабы не вышло чего.
Можно я за него отвечу? Мне тоже приятнее думать, что некоторые люди за комментарии получают деньги. И именно поэтому в комментариях бывают проблемы с логикой и прямые противоречия здравому смыслу — для доказательства оплаченной точки зрания. Мне не хочется верить что человек может такое писать на полном серьезе.
Это мало относится к firk, он и правда просто пост по диагонали прочитал, похоже.
Задачка простая, да. Но она ведь основана на куда более интересной задаче, которую я вам и предлагаю решить. Очень ее люблю.
У некоторого султана было два мудреца: Али-ибн-Вали и Вали-ибн-Али. Желая убедиться в их мудрости, султан призвал мудрецов к себе и сказал: «Я задумал два числа. Оба они целые, каждое больше единицы, но меньше ста. Я перемножил эти числа и результат сообщу Али и при этом Вали я скажу сумму этих чисел. Если вы и вправду так мудры, как о вас говорят, то сможете узнать исходные числа».
Мудрецы задумались. Первым нарушил молчание Али.
— Я не знаю этих чисел, — сказал он, опуская голову.
— Я это знал, — подал голос Вали.
— Тогда я знаю эти числа, — обрадовался Али.
— Тогда и я знаю! — воскликнул Вали.
И мудрецы сообщили пораженному царю задуманные им числа.
Парни, вы даже не представляете, какое вам спасибо!
Несколько месяцев назад хотел оправить пулл-реквест для Image.thumbnail(), но как всегда стало лень лезть в основной модуль, исправил оберткой извне.
Как-то она неуловимо отличается от Opera Beta. Даже шрифты другие использует на тех же сайтах.
Плюс с адресной строкой творится непонятно что — при загружке страницы элементы интерфейса накладываются друг на друга. В Opera Beta опять же не наблюдается.
А вообще — проделана огромная работа над интерфейсом с прошлой стабильной версии, спасибо большое!
Можете сделать еще немного хорошего для игр для мобильных платформ, если не только откажетесь от F2P, но и обратите внимание на игры вроде World of Goo или Little Inferno.
Периметр и King's Bounty переизданный относительно новые игры, нет? Ксомические рейнджеры последние вышли менее года назад. Вангеров (Z-Mod) до сих пор неспешно пилят. Плюс есть всякие Спектромансеры и прочая.
Можете подсказать?
2) Если хотите чтобы параметры по умолчанию отображались в помощи, можно использовать такой ArgumentParser
Сейчас я работаю программистом и так или иначе использую навыки полученные тогда. Вот так игры отрицательно влияют на детей.
Еще лучше бы конечно разрешить запускать только специально созданный амазоном образ виртуалки и запретить пользователю его менять, дабы не вышло чего.
Это мало относится к firk, он и правда просто пост по диагонали прочитал, похоже.
Несколько месяцев назад хотел оправить пулл-реквест для Image.thumbnail(), но как всегда стало лень лезть в основной модуль, исправил оберткой извне.
Хорошо, что не все такие же ленивые, как я.
Плюс с адресной строкой творится непонятно что — при загружке страницы элементы интерфейса накладываются друг на друга. В Opera Beta опять же не наблюдается.
А вообще — проделана огромная работа над интерфейсом с прошлой стабильной версии, спасибо большое!
Не понимаю, к чему тут «когда-то были»