Задать вопрос
  • Не работает многопоточность?

    Vindicar
    @Vindicar
    RTFM!
    Thread(target=egz_checkden(), args=())

    Когда уже погромисты научатся различать результат вызова функции (со скобками) и ссылку на функцию (без скобок).
    У тебя сейчас Питон пытается выполнить egz_checkden(), чтобы получить её возвращаемое значение и использовать его в качестве target.

    И да, у тебя в egz_checkden() бесконечная рекурсия, пусть и медленная. Вылетит с переполнением стека, хотя и не сразу. Не делай так, используй нормальный цикл.
    Ответ написан
    4 комментария
  • Как интерпретировать JavaScript при запросе requests?

    Vindicar
    @Vindicar
    RTFM!
    Никак. requests не для этого предназначен. Тебе нужен полноценный браузер, и код для управления им.
    Т.е. пакет selenium.

    EDIT: AlexBoss ниже правильно заметил - если сайт не слишком старается отсеивать ботов, то можно попробовать идентифицировать запросы, через которые выполняется подгрузка интересующих частей страницы, и выполнить их самому. Это позволит обойтись силами только requests, но это не всегда легко сделать.
    Ответ написан
    Комментировать
  • Как достать полный номер телефона в объявлении на Avito?

    @galaxy
    А у них теперь номера мало того, что через AJAX загружаются по клику, так еще и приходят в виде картинок data/png
    Ответ написан
    Комментировать
  • Ценятся ли программисты-самоучки в странах Евросоюза?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.

    1) каковы будут мои шансы получить работу в подобной стране, имея при этом хороший уровень английского, непрерывный год самообразования в области IT (в идеале Python, так как к C-языкам испытываю ненависть, или что-то, связанное с дизайном и при этом прибыльное)?

    Java, C#, JavaScript, PHP, go, С, С++,

    Все это си подобные и наиболее используемые расставил по популярности.

    2) какие шаги предпринять для того, чтобы успешно устроиться на работу за рубежом без образования?

    Устроится в аутсорс компанию типа epams или dataart ну или поработать на upwork и набить себе резюме а потом через линкедит начинать связываться с hr

    3) советы новичку по плану обучения Python-разработке: какой план самообразования видите именно Вы?

    WZF RTFM
    https://www.python.org/doc/
    Ответ написан
    Комментировать
  • Как лучше поступить в данный момент?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Обьяснить довольно просто. Давите финансами.
    А насчет обучения думайте. Лучше конечно заочка и работа в оутсорс фирме. За 3-4 года поднимите свой уровень до мидла.
    В итоге через 3-4 года вы будете иметь

    * опыт работы и подтвержденные проекты
    * диплом
    * подушка по деньгам
    * какие то связи с однокашниками
    * возможно у вас в институте будут программы обмена студентами
    Ответ написан
    Комментировать
  • Что такое и зачем lpNumberOfBytesWritten в WINAPI функции WriteFile?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Дык английским же по белому написано - long pointer на переменную, в которой вернётся количество записанных байт.
    Ответ написан
    1 комментарий
  • Когда требуется использовать await при вызове async функции?

    Vindicar
    @Vindicar
    RTFM!
    Следует различать вызов асинхронной функции и её выполнение.
    В твоём случае, вызов work(p) завершится немедленно (без входа в тело функции), и вернёт объект Future.
    Этот объект описывает выполняемую асинхронную операцию (ввод-вывод, выполнение функции и т.п.).
    Затем следует запланировать выполнение этого объекта в рамках цикла реактора (loop в т ерминах asyncio).
    Для этого можно использовать два способа. Если ты находишься в синхронном коде, ты должен использовать loop.create_task() (или более старую функцию, loop.ensure_future()).
    Если ты находишься в асинхронном коде, то твоя текущая функция уже завёрнута в свой собственный Future, и уже выполняется в рамках цикла реактора. Тогда ты можешь использовать await для того, чтобы "уступить место" вызываемой функции - запланировать её выполнение в рамках того же цикла, что и вызывающая функция, а вызывающую функцию приостановить до завершения выполнения вызываемой. Либо, если тебе не требуется дожидаться результата выполнения вызываемой функции, можешь также использовать первый способ.

    Таким образом, когда ты "вызываешь асинхронную функцию через await", ты на самом деле получаешь future-объект и тут же планируешь его выполнение.
    Т.е.
    X = await foo()
    будет тем же самым что
    future_X = foo()
    #future_X можно хранить, но если он будет удалён без выполнения - это даст ошибку never awaited
    X = await future_X
    Ответ написан
    Комментировать
  • Существуют ли коммутаторы с возможностью изляции отдельных портов друг от друга?

    Да. Эта фича называется vlan.
    Должна быть во всех управляемых коммутаторах.
    Но как конкретно это реализовать - не подскажу.
    Ответ написан
  • Как сделать uptime, чтобы типа таймер шёл после запуска скрипта бота и показывал сколько времени работал бот discord py?

    Vindicar
    @Vindicar
    RTFM!
    Делать постоянно тикающий счётчик неэффективно и неудобно.
    Лучше просто при запуске бота сохрани текущее время в переменную.
    Когда у тебя запрашивают аптайм (т.е. в обработчике команды !uptime), вычти из текущего времени сохраненное в переменной - получишь интервал времени между ними. Это и будет аптайм. Останется только его отформатировать красиво.
    За подробностями смотри модуль datetime, типы данных datetime и timedelta.
    Ответ написан
    Комментировать
  • SyntaxError, как исправить?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Ну, во-первых в куске кода, который вы приложили, этой ошибки нет.
    Во-вторых, async - зарезервированное слово, не стоит его использовать не по назначению
    Ответ написан
    6 комментариев
  • Что происходит на рынке труда в айти?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    В программировании очень большой процент самостоятельной творческой работы и умению работать над собой, чтобы повышать свою квалификацию.
    Это требует определенных привычек, возможно склада ума. И проблема в том, что эти привычки к тому возрасту когда начинаешь работать обычно уже сформированы. Бесповоротно.
    Поэтому курсы могут дать какие-то знания, но если ты не тот человек, осилить профессию и адекватную работу будет крайне сложно. Разговоры о выгорании - 90% это когда человек не расположенный к профессии поиздевался над собой сперва на курсах, потом на какой-то работе, а потом надоело. Потому что душа к такому образу жизни не лежит. Да, конечно есть когда человек работает на износ, но опять же адекватный человек вовремя должен обратить на это внимание.

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

    Понятно, что любой баран может устроиться на работу в ИТ. Имеется ввиду что шанс есть. И в ентерпрайзах всегда найдется местечко, когда оплаченная заказчиком позиция уже оплачена, а команда справляется независимо от того, что в команде есть баран. И он может там проработать довольно долго, пока не выгонят, потому что команда справляется, а менеджеру пофиг. Но это исключение из правил, и такие случаи - единичны. А такие случаи будоражат молодежь, и про них могут потом рассказывать "как я вчера был двоечником, а теперь рабоаю в большой международной компании зарабатываю тыщи баксов и ничего не делаю".
    Ответ написан
    Комментировать
  • Как исправить код, чтобы это работало в многопоточном режиме?

    Vindicar
    @Vindicar
    RTFM!
    Это многопроцессность, а не многопоточность. Разница ОЧЕНЬ значительная, так как у разных процессов разные адресные пространства, и данные между ними приходится пересылать с сериализацией через pickle.

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

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Часто собеседую людей. Действительно толковых - единицы...
    Найти хоть более-менее разбирающегося в вопросе очень тяжело - и это я не лезу в высокие материи типа тонкостей использования семафоров в ядре линукс (как когда-то меня самого спрашивали при собеседовании на позицию разработчика python %) ), а спрашиваю про самые базовые понятия, с учетом того что если человек толковый и понимает то что сам говорит - то в остальном сам разберется...
    После курсов не помню никого кто бы смог пройти собеседование и заинтересовать.
    Так что про легкость входа в IT - это обычный маркетинг.
    Ответ написан
    3 комментария
  • Что происходит на рынке труда в айти?

    Zoominger
    @Zoominger
    System Integrator
    Существует ли реальная проблема нагруженности рынка труда людьми с курсов?

    Нет. Работал много где и мотаюсь по разным сферам, но из 3-4 сотен айтишников я не видел ни одного, кто заканчивал бы какие-то курсы и перешёл после этого в IT. Курсики - налог на глупость.
    Ответ написан
  • Во время произношения ассистент говорит "текст"None, как можно исправить?

    Vindicar
    @Vindicar
    RTFM!
    Что за ерунда у тебя в коде творится? Поучи азы Питона сначала, потом уже бросайся помощников писать...

    say_message("Здравствуйте, хозяин!" and "Рад снова вас видеть!")
    Как по твоему, что вот этот and должен значить? На самом деле, у тебя ВСЕГДА будет произноситься только второе выражение. and - это логический оператор в первую очередь. Его поведение для не-логических значений весьма специфическое.

    say_message("Как пожелаете"+str(right_mouse_control()))
    Оставляя за кадром вопрос "зачем", что возвращает функция right_mouse_control()? Она должна возвращать какой-то текст для произношения? Если должна, она явно этого не делает. Если не должна, то зачем ты засовываешь её возвращаемое значение в строку? Почему просто её не вызвать, вне рамок say_message()?
    То же самое для остальных вариантов ниже.

    Ну и простыня elif как вишенка на торте, да.

    EDIT: покажу, как можно это улучшить. Код сложный, но зато легко расширяется.
    Сделаем класс, который будет рулить списком известных команд и сопоставленными им фразами.
    Чтобы не пришлось повторяться, сделаем так, чтобы для добавления новой команды достаточно было
    написать функцию и задекорировать её. Пример будет ниже.
    class VoiceCommandList: #класс управляет списком голосовых команд
      def __init__(self):
        self.actions = list() #список известных классу команд
      
      def on(self, condition): #декоратор, подписывает функцию на голосовую команду
        if isinstance(condition, str):
          condition = condition.lower()
          predicate = lambda text: condition in text #если условие - строка, она должна входить в текст
        elif callable(condition):
          predicate = condition #если условие - функция, она должна вернуть истину для текста
        else: #ни то ни другое - ошибка
          raise TypeError('Condition must be either string or function!')
        #эта функция - декоратор, она будет помечать функции-команды.
        #она описана именно внутри метода on()!
        def decorator(command_func):
          self.actions.append( (predicate, command_func) )
          return command_func
        return decorator
      
      def run_command(self, text): #функция получает строку, определяет и вызывает соотв. её команду
        text = text.lower()
        for predicate, command in self.actions:
          if predicate(text): #текст соответствует известной команде
            try:
              response = command(text) #пытаемся выполнить команду
              if response is None: #если команда не сообщила нам, что ответить
                response = "Команда выполнена" 
            except Exception as err: #не получилось
              response = "Ошибка при выполнении команды"
              print(err)
            if response: #если есть какой-то ответ
              say_message(response) #то произносим его
            break #выполняем не более одной команды за раз
        else: #этот else относится к for, не к if! Если не нашли ни одной похожей команды
          say_message("Неизвестная команда")

    А теперь примеры использования класса. Мы можем добавлять команды, описав функции. Нет нужды править длинную простыню if-elif-else
    vcl = VoiceCommandList() #экземпляр списка команд
    
    #опишем реакцию на простую строку типа "привет".
    @vcl.on('привет') #если передаём в декоратор строку - это означает, что строка должна содержаться в тексте
    def hello(text): #функция-команда принимает аргумент - сказанный пользователем текст
      return "Доброе время суток" #она должна вернуть текст, который скажет бот
    
    @vcl.on('открой оперу')
    def start_opera(text):
      operaopen() #выполняем действие
      return "Браузер запущен" #возвращаем текст ответа
    
    @vcl.on('напиши')
    def write_message(text):
      print(text)
      #если ничего не вернём, будет отклик по умолчанию
    
    @vcl.on(lambda text: ('влево' in text) and ('вправо' in text)) #можно делать сложные условия!
    def what(text):
      return "Так влево или вправо?"

    Ну а чтобы скормить боту распознанную строку:
    vcl.run_command('привет') #сюда можно подставить выхлоп распознавателя речи
    Ответ написан
    8 комментариев
  • Как преодолевается потеря мотивации в ИТ?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    - Жениться
    - Взять ипотеку
    - Родить парочку детей
    (вовсе не обязательно в такой последовательности :) )
    После всего оного мотивации будет - выше крыши! :)
    Ответ написан
  • Где учится созданию ботов на python?

    Zoominger
    @Zoominger Куратор тега Python
    System Integrator
    Нигде. Читаете книжку по Пистону, читаете модуль для Telegram. Пишете.
    Ответ написан
    Комментировать
  • Нужно ли 40-летнему джуну уметь максимально много?

    @Neonoviiwolf
    Flutter developer
    До скок не учи, без опыта работы вы всегда будете джуном. Да и как ток спросят чуть сложнее основ, вы сразу завалитесь по любой выбранной вами теме
    Ответ написан
    Комментировать
  • Почему вызов функции вызывает ошибку?

    Vindicar
    @Vindicar
    RTFM!
    > on_press = BoxOneP()
    Ты присваиваешь параметр on_press результат вызова функции BoxOneP. Которая возвращает None.

    Может, всё-таки имелось ввиду просто "on_press=BoxOneP"?

    И да, что значит "ломает приложение"? Текст ошибки со стектрейсом с студию.
    Ответ написан
    2 комментария