Задать вопрос
  • Почему python возвращает существующий объект, вместо создания нового?

    В вашем примере выражение set() вычисляется один раз, а уже затем вызывается fromkeys. Это не имеет никакого отношения к set, так работают функции почти во всех языках программирования - сначала вычисляются значения аргументов, а потом с этими значениями вызывается функция. Итого, у вас везде передаётся один и тот же объект set. Будь там не set, а какой-нибудь Student, было бы то же самое.
    Правильный вариант: set_dict = { x: set() for x in range(3) }
    Ответ написан
    2 комментария
  • Почему http.server отвечает через две секунды?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    SERVER_ADDRESS = 'localhost'
    меняешь на
    SERVER_ADDRESS = '127.0.0.1'

    объяснять нужно? и вооьбще - какую проблему решаем-то?
    Ответ написан
    7 комментариев
  • Почему пятно света от лазерной указки выглядит зернистым?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    https://en.wikipedia.org/wiki/Speckle_(interference)
    Если вкратце - то из-за интерференции когерентного света лазера.
    Ответ написан
    3 комментария
  • Как хранить константы в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваш подход вполне пригоден к использованию и его можно применять.
    Тут надо внести ясность, что есть разница между константами и настройками. Настройки предполагается менять, их иногда "перекрывают" через параметры командной строки или переменные среды окружения.
    Если вам нужны настройки, то этот вариант не годится. Используйте предложенный выше вариант с Pydantic.
    Если это именно константы, их не потребуется или не скоро потребуется перекрывать, загружать из файлов, пробрасывать через переменные среды окружения, через параметры командной строки и т.д.
    Если значения этих констант приемлемо хранить в репозитории, то нет ничего плохого в том, что вы группируете константы в классы. Это нормально для питона.

    Но учтите, что вам может захотеться хранить в таких вот местах какие-то чувствительные, т.н. секретные данные. Например, ключи шифрования, пароли для подключения к БД или другим сервисам, ключи API, всякие токены и т.д. Такие данные опасно, неудобно и неправильно хранить в репозитории вместе с кодом. Для хранения таких параметров тоже нужно использовать библиотеки для хранения, сериализации и десериализации настроек.

    Возможно у вас возникнет соблазн сейчас сделать вот так по-простому, а чувствительные данные и секреты тоже импортировать в виде питоновских модулей, но эти модули добавить в игнор-лист репозитория, а импортировать с соответствующим перехватом ошибок импорта... Так можно сделать, если вам критически не хочется брать в проект лишние зависимости, но это тот ещё геморрой. Лучше использовать специальные механизмы хранения настроек сразу. Тем более это потребует меньше кода (который нужно еще и тестировать) и сложности (которую принято выносить и тестировать отдельно, чем такие либы как Pydantic и занимается).
    Ответ написан
    1 комментарий
  • Как хранить константы в python?

    @blozheupasi
    По поводу Enum и постоянного обращения на value. Можно делать так:

    class CustomEnum(str, Enum):
        """Помощник, чтобы не писать .value кажыдй раз при вызове enum класса
    
        Вызов: YourCustomEnum.megaparam # сразу вернет значение, .value в конце не нужно
        """
        def __str__(self) -> str:
            return str.__str__(self)


    По поводу хранения и быстрого переопределения параметров в продакшне можно вместо БД (если, конечно, речь о чем-нибудь типа psql или mysql) использовать etcd — он легкий и умеет в HTTP.
    Ответ написан
    2 комментария
  • Как хранить константы в python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вот большой гайд о константах, Там в принципе описаны все возможные способы создания констант, а их много. И самое главное, есть раздел Handling Your Constants in a Real-World Project, то что тебе и нужно, а не просто "знакомство". Ресурс в python среде пользуется репутацией, его даже в продвинутых книгах упоминают.
    https://realpython.com/python-constants/
    Ответ написан
    4 комментария
  • Как хранить константы в python?

    @twistfire92
    Python backend developer
    Как вариант, можете использовать BaseSettings из Pydantic (Но надо смотреть на версию, во второй отдельная либа для настроек). Получится лишь в ваш класс добавить наследование от BaseSettings. Но если вы не собираетесь прокидывать переменные окружения в настройки, то и ваш вариант вполне рабочий.
    Ответ написан
    Комментировать
  • Что означает термин "Махровый Энтерпрайз"?

    DevMan
    @DevMan
    означает тоже самое, что и "кровавый энтерпрайз"))

    обычно это в той или иной степени совокупность таких параметров как:
    • крупный проект, рассчитанный на крупного клиента. обычно на джаве или прочих дотнетах.
    • многолетний, с тонной легаси, который необходимо поддерживать.
    • крупная контора-разработчик. с сопутствующими бюрократией и костностью, и вытекающих из этого сложностей во внедрении современных технологий и коммуникации.
    • зачастую монструозность. гляньте https://github.com/EnterpriseQualityCoding/FizzBuz... это конечно же шутка, но зачастую она оказывается недалека от реальности.
    Ответ написан
    Комментировать
  • Как улучшить данную реализацию?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Не использовать Popen. Лучше всего код из executer/__main__.py переписать, как асинхронный модуль, импортировать в скрипт и запускать в цикле событий. Если это невозможно, то использовать какую-нибудь очередь задач, с которой можно асинхронно работать. В крайнем случае использовать run_in_executor, но лучше не надо.
    Ответ написан
    1 комментарий
  • Как решить ошибку "'str' object is not callable"?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    By.CLASS_NAME
    - не функция.
    login = driver.find_element(By.CLASS_NAME, «omlet-bar-login-button»)
    Ответ написан
    Комментировать
  • PyQt5 или PySide 2?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Основное отличие -- это лицензии под которыми распространяются эти две обёртки над Qt.

    PyQt5 распространяется под GPL и коммерческой лицензией.

    PySide2 распространяется как Qt под GPL, LGPL и коммерческой лицензией.

    Пишите открытое/свободное ПО -- можно использовать как PyQt5, так и PySide 2.o

    Пишите закрытое/коммерческое ПО -- бесплатно можно использовать только PySide 2, а для использования PyQt5 потребуется покупать коммерческую лицензию.

    И если Вы живёте, работаете на компанию или имеете клиентов в США и Евросоюзе -- различие существенное, судебные иски там бывают.

    На постсоветском пространстве, я не припоминаю, чтобы кто-то подавал в суд из-за использования библиотек под лицензией GPL в коммерческих продуктах.

    Если Вам непринципиально на каком современном GUI-тулките писать десктом-приложение. С Python, помимо обёрток над GUI-тулкитом Qt5 (PyQt5, PySide 2), можно использовать обёртку для GUI-тулкита Gtk3 -- см. документацию тут Python GTK+ 3 и тут PyGObject -- код GTK и необходимых для Python библиотек лицензирован под LGPL, что позволяет использовать их в коммерческих продуктах.

    ДОПОЛНЕНО исходя из комментария автора вопроса

    Но меня интерисовала скорее производительность.


    Старайтесь формулировать вопрос так, чтобы он отражал то, что Вас интересует.

    В июне был открыт и в июле уже закрыт багрепорт по производительности одного из классов PySide2 в сравнении с тем же классом в PyQt5:
    https://bugreports.qt.io/browse/PYSIDE-727

    Если говорить о производительности в целом, то вопрос не имеет особого смысла.

    Производительность обеих обёрток упирается в производительность компонентов Qt5.

    Сравнивать производительность обеих обёрток надо по одинаковым кейсам.

    Большая разница в производительности PySide2 и PyQt5 на одном и том же кейсе будет причиной для багрепорта и исправления в PySide2 или в PyQt5, соответственно.

    Вы можете перестраховаться и 6-12 месяцев не трогать PySide2 со дня первого стабильного релиза (16.07.2018). Вдруг ещё остались недоработки, так пусть другие разработчики и компании используют PySide2 в продакшене на свой страх и риск сейчас, попишут разработчикам PySide2 багрепорты, а Вы получите от сообщества более стабильный и проверенный, не на Вас и не на ваших пользователях, продукт.

    Так как один проект официальный, а второй нет.


    Не совсем понятно, что такое официальный проект.

    На сайте Qt есть раздел Qt для Python, сейчас там написано про PySide2:
    doc.qt.io/qtforpython/index.html

    Это при том, что PyQt5 вышла давно, а PySide2 после многих лет разработки стабилизировали недавно.

    Возможно, лицензионная политика PySide2 больше устраивает разработчиков Qt5 и поэтому они решили продвигать PySide2.

    В таком случае, PySide2 можно считать "официальным" проектом, а PyQt5 стало быть "кустарщиной".
    Ответ написан
    4 комментария
  • Создание класса?

    @Araya
    Почитай про конструкторы
    Ответ написан
    1 комментарий
  • Python, im stupid. Help. Alarm. Anybody?

    @ar2rsoft
    PHP-developer
    Вам нужно почитать про синтаксис питона
    Ответ написан
  • Что надо знать чтобы изучить pl/sql?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Чтобы изучать pl/sql неплохо бы уметь читать, чтобы была возможность читать документацию.
    Ответ написан
    Комментировать
  • Как запретить передавать пустые агрументы в процедуру?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    docs.oracle.com (Parameter Declaration):
    You cannot constrain this data type (with NOT NULL, for example).
    Ответ написан
    Комментировать