All streams
Search
Write a publication
Pull to refresh
32
0
Send message
Комментарии не относятся к коду, я так написал мысли читающего код. Проблема в том что когда у нас более сложные условия в такой вот булевой функции, приятное если в проверках всегда возвращается 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 будет если не залогинен или
    # не суперпользователь или с подпиской? Надо перечитать
Спасибо. Меня это напрягло, учитывая что argparse это умеет.
Я так и не разобрался, как в click сделать поддержку списков аргументов, например `--my-args first second third`.

Можете подсказать?
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(), но как всегда стало лень лезть в основной модуль, исправил оберткой извне.

Хорошо, что не все такие же ленивые, как я.
Извините, а при чем тут сцена?
Угу, чем и сломали обратную совместимость. Большинство библиотек на d9000 не портированы.
Как-то она неуловимо отличается от Opera Beta. Даже шрифты другие использует на тех же сайтах.
Плюс с адресной строкой творится непонятно что — при загружке страницы элементы интерфейса накладываются друг на друга. В Opera Beta опять же не наблюдается.

А вообще — проделана огромная работа над интерфейсом с прошлой стабильной версии, спасибо большое!
Неужели так скучно отвечать отвечать себе а не в комментарии?
Можете сделать еще немного хорошего для игр для мобильных платформ, если не только откажетесь от F2P, но и обратите внимание на игры вроде World of Goo или Little Inferno.
Периметр и King's Bounty переизданный относительно новые игры, нет? Ксомические рейнджеры последние вышли менее года назад. Вангеров (Z-Mod) до сих пор неспешно пилят. Плюс есть всякие Спектромансеры и прочая.

Не понимаю, к чему тут «когда-то были»
Да уж, хорошо что в России всё не так.
Елки! Срочно откатываемся!!!

Information

Rating
Does not participate
Registered
Activity