• Есть ли для Python простые в использовании ORM с поддержкой asyncio и type hints?

    fenrir1121
    @fenrir1121
    Начни с документации
    Алхимия де-факто стандарт. Можно попробовать врапперы над ней, хотя все тоже с проблемами. Eсть подозрения, что сейчас алхимия и пайдентик апнулись до 2 версии и оживет sqlmodel.

    Что до списка выше есть вот такой разбор от контрибьютора черепашки. Можно глянуть по цифрам и выводам, с чем-то из ограничений все равно приходится мириться.
    Ответ написан
    2 комментария
  • Как обойти блокировки сайтов?

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

    Не факт, конечно, что там именно такая параноидальная и замороченная система, но такое определённо имеет смысл, если надо предотвратить долбёжку и не целевое использование АПИ.

    Кстати, по урлу из вашего кода источник дал мне множество раз быстро обновлять страницу. Я не заметил, чтобы там что-то менялось с такой скоростью. Изучите ответ сервера, там есть заголовки, намекающие о времени рекомендуемого кэширования ресурса.

    Ещё вы рандомизируете юзер-агент, но возможно имеет смысл притвориться браузером и не скакать по юзер-агентам так уж часто, тем более по рандомным.
    Сопоставить запросы между собой можно и при разных адресах, а выходные адреса тора, как вам уже сказали в комментарии к вопросу, немногочисленны и всем известны.
    Ответ написан
  • Не понимаю, почему данные в разных строках?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Потому что нужно выучить хотя бы базовый синтаксис SQL! Одна строка вставляется одним запросом, каждый инсерт вставляет новую строку!
    execute('INSERT INTO table (FIO, Address, Email) VALUES (?, ?, ?)', ('ФИО', 'Your Address', 'your@email.com'))
    Ответ написан
  • Как сделать возможность редактировать результат?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Перво-наперво вам надо изучить язык, на котором вы предполагаете писать код. Сейчас вы с ним познакомились, а надо - изучить.
    Затем вам надо изучить структуры данных и алгоритмы.
    Также неплохо было бы посмотреть, как устроены программы у других людей, на GitHub к примеру.

    Это в общем.
    В частности, чтобы в вашем коде можно было “менять числа не перезапуская программу”, это надо в программе предусмотреть. Например, так:
    while True:
        Поля = input('Кол-во полей? ')
        Заводы = input('Кол-во заводов? ')
        Лаборатории = input('Кол-во лаб.? ')
        
        print ('Поля', Поля)
        print ('Заводы', Заводы)
        print ('Лаборатории', Лаборатории)

    Это самый простой способ реализации, что называют «в лоб». Как именно это сделать «по уму» - надо приложить ум.
    За вас это могут сделать, но не здесь, а на freelance
    Чтобы вы смогли самостоятельно сделать это, см.первую часть моего ответа.
    Ответ написан
    2 комментария
  • Как подключиться к Wifi на C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе работать с Wifi на С++ нужно будет только в одном случае - когда ты разработчик драйвера Wifi устройства.

    В остальных случаях - ты пишешь обычные приложения на С++ которые используют сокеты TCP/UDP, которые (сокеты) в свою очередь работают через стек технологий ОС для кидания пакетов в Wifi интерфейсы в соотвествии с правилами таблиц маршрутов.
    Ответ написан
    2 комментария
  • Где искать svg всех городов, районов, областей, стран?

    hint000
    @hint000
    у админа три руки
    CityCat4, почти согласен
    Я бы начал с 2gis или Яндекс-Карт.
    Только не 2gis или Яндекс, а OSM (OpenStreetMap), ибо Open - ничего не спрятано, вот они все исходные данные, вот оно описание формата, легче уж некуда.
    https://www.openstreetmap.org/#map=12/42.8768/74.6013
    https://wiki.openstreetmap.org/wiki/RU:Tag:boundar...
    Ответ написан
    2 комментария
  • Странная не последовательная работа функции в tkinter python?

    @oxidizerby Автор вопроса
    Подошло решение от @Vindicar
    Только немного изменил в моём случае лучше использовать root.update()
    Изменил функцию так:
    def run():
        print(1)
        label1['text'] = 'Но он меняется после sleep и print(2) и print(3)'
        root.update() # Вот эта строка решает проблему!
        print(2)
        sleep(5) # Для наглядности
        print(3)
    Ответ написан
    Комментировать
  • Как мне применить список из функции в другой функции?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А в чем, собственно, проблема? Передайте это значение в функцию в качестве аргумента, или вон вы глобальной переменной уже пользуетесь, можете и тут наговнокодить так же.
    Вы не объясняете что конкретно у вас не получается. В чем вопрос? Предоставляете довольно объемный код, который, судя по вопросу, написали не вы и чего хотите? Чтобы вам краткий, но исчерпывающий курс по программированию с нуля тут изложили? На какой-то другой ответ в вопросе просто недостаточно информации.

    А бесплатных курсов и репетиторов тут нет.
    Ответ написан
    2 комментария
  • Почему ничего не выводится хотя ошибок нет?

    HemulGM
    @HemulGM Куратор тега Python
    Delphi Developer, сис. админ
    Да вы задрали. Всё он выводит. Программа сразу закрывается, потому что она не обязана ждать. Она ЗАВЕРШИЛАСЬ!
    input() после print напиши и не закроется, пока не нажмешь что-то
    Ответ написан
    1 комментарий
  • Возникла ошибка Type Error в Python при изучении классов. Где и что в коде не правильно?

    Maksim_64
    @Maksim_64
    Data Analyst
    потерял скобки при создании экземпляра класса. deck = Deck(), Я скопировал, твой код и запустил у себя, там следом еще ошибка, вот в этой строе
    elf.cards[i], self.cards[j] = self.cards[j], self.cards[i]
    говорит list index out of range по всей видимости вот в этой строке j = random.randint(i, num_cards-1) Нужно, добавить -1, что я и сделал тогда все работает.
    Ответ написан
    1 комментарий
  • AttributeError: 'NoneType' object has no attribute 'get_text'. Как решить?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В вашем коде не так - это отсутствие проверок на возвращаемые значения. Любой из селекторов может не найти требуемых элементов и вернуть None, а у None никаких методов нет, включая метод get_text.
    Ответ написан
    2 комментария
  • Как мне исправить ошибку KeyError: 18?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Хорошо бы понять, откуда в class_id попадает невалидное значение ключа?
    1. Если такого быть не должно, надо искать причину.
    2. Если такое возможно, надо обрабатывать это исключение через try/except KeyError, либо предварительно валидизировать значение class_id
    Ответ написан
    Комментировать
  • Экстренное завершение работы чат бота Telegram. Как решить проблему?

    nki
    @nki
    bezkart.ru готовая система лояльности
    т.к программирую всего 2 дня

    Тогда вам не с бота надо начинать, а уверенно знать язык и его основные конструкции. Успеете еще ботов написать.
    Ответ написан
    2 комментария
  • Как возвратить курсор на 2 символа назад в консоли?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Комментировать
  • Как корректно отобразить данные из ini файла?

    HemulGM
    @HemulGM Куратор тега Python
    Delphi Developer, сис. админ
    Ini - стандартизированный формат. Для работы с ним есть готовые инструменты
    https://docs.python.org/3/library/configparser.html
    Ответ написан
    Комментировать
  • Как код с графическим интерфейсом на основе PyQt6 собрать в .exe?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PyQt
    Седой и строгий
    Безотносительно того, как это делается, стоит иметь ввиду, что это незаконно. Лицензия опенсорсного Qt не позволяет включать библиотеку в исполняемый файл, будь то хоть статическая линковка, хоть упаковка.
    Ответ написан
    Комментировать
  • Как правильно подходить к возвращаемым типам функциях php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Хорошие вопросы.
    Разумеется, увеличивать количество запросов к БД ради красивой типизации - это абсолютно не вариант.

    Как можно увидеть, в приведенной цитате написано не однозначно, а "скорее всего".
    И поэтому надо конечно стараться, чтобы функция возвращала какое-то одно значение, но не делать этого любой ценой. Поэтому getUserDataFromDatabase вполне может возвращать array|false, а getUserIdFromDatabase - int|false, хотя я бы с ней не заморочивался, первой вполне достаточно. А userIsPresentInDb вообще не нужна, вместо неё можно использовать одну их предыдущих.

    Другое дело, что нужного результата можно добиться и другим способом.
    Ведь вполне можно вернуть пустой массив. И таким образом формально соблюсти типизацию.

    return $result ?: []; // дёшево и сердито

    Но это будет всё равно не очень красиво. В одной стороны - да, для проверки, вернула ли функция непустое значение, такой вариант вполне сгодится. Но с другой стороны все равно как-то неаккуратненько. Ведь мы на самом деле ждём не абы какой массив, а вполне определённый, с конкретным набором полей. То есть, если эта функция вернет массив вида [0, 42, 100500], то это будет явно не то, что нам нужно, но при этом типизация и слова поперёк не скажет.

    Если думать от типизации, то функция getUserDataFromDatabase, возвращающая какой-то абстрактный массив - это нонсенс, бессмыслица. Эта функция должна возвращать юзера. Поэтому в идеале надо придумать способ указать, что функция возвращает не абстрактный, а конкретный массив определенного формата. Тем более, что такой способ как раз есть, ведь типизованный массив - это же объект! И для данного случая даже специальный паттерн есть - ValueObject (хотя в случае с пользователем лучше будет все-таки делать полноценный класс, содержащий не только данные, но и методы, например auth(), который сравнивает хэш пароля с введенным).

    Соответственно, в идеале функция должна возвращать объект, представляющий пользователя.

    И уже в этом объекте поле id может либо либо быть нулём, либо иметь какое-то положительное значение. Или даже объект может содержать отдельное свойство, заполнен/не заполнен.

    И вот в этом случае типизация заиграет совсем новыми красками, и будет использоваться на 100%
    function getUserFromDb( int $userId ) : UserObject {
            return $result ? UserObject::fillFromArray($result) : new UserObject();
    };
    $user = getUserFromDb();
    if (!$user->id) {
        // нинашли :'(
    }


    Но опять же, как пишет ниже Сергей delphinpro, зависит от задачи.
    И решив проблему правильной типизации значения, которое функция вернет, если нашла пользователя, можно вернуться к вопросу о том, что возвращать, если функция ничего не нашла. И в этом случае вполне подходящим вариантом будет вернуть null
    function getUserFromDb( int $userId ) : ?UserObject {
        return $result ? UserObject::fillFromArray($result) : null;
    };
    
    if ($user = getUserFromDb()) {
        // нашли :)
    }
    Ответ написан
    6 комментариев
  • Почему boolean использует больше памяти чем byte?

    mayton2019
    @mayton2019
    Bigdata Engineer
    С точки зрения ассемблера - удобнее делать операции над целым числом (DWORD) 32bit. Он - же int.
    В масштабах современной памяти - безразлично выделять 1 байт или 4 байта. Все равно
    другие структуры больше захватят тысячекратно. А простота компилируемого кода - здесь важнее.

    Вот поэтому компилляторы и собирают boolean в int. А язык С++ позволяет проводить аналогии
    между int и boolean. В зависимости от контекста число может быть как числом так и логической
    величиной. (Тесная связь с ассемблером да).

    А если речь допустим идет о массиве boolean - тогда смысл в экономии есть. В Java например
    такой массив действительно будет использовать биты внутри байта.

    В базах данных например (Oracle) вообще нет булевого типа с точки зрения хранения. Там предлагают
    символьный тип 'Y' или 'N'. Это связано с дисковыми структурами хранения данных в datarow.

    Поэтому sizeof(булевый тип) будет всегда парадоксом в разных системах программирования и языках.
    Как компиллятору удобнее так и соберет.
    Ответ написан
    Комментировать
  • Почему пустой tuple занимает больше памяти, чем tuple с None?

    В случае b у тебя не tuple, а просто None.
    Чтобы получился tuple из одного элемента - нужно добавить запятую
    b = (None,)
    b.__sizeof__() # 32
    Ответ написан
    1 комментарий
  • Как обрабатывать такие исключения в python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Никак, потому что это, во-первых, не исключения, а во-вторых, эти сбои происходят не в питонячьем коде.
    Ответ написан
    2 комментария