• Как в беседе использовать messages.getHistory?

    Xaeruz
    @Xaeruz
    Программный Змей
    #Групповой бот:
    msg_history = vk.method("messages.getHistory", {"peer_id": peer_id})
    #Страничный бот:
    msg_history = vk.messages.getHistory(peer_id=peer_id)
    Ответ написан
    8 комментариев
  • Как работать с pymysql?

    enotcode
    @enotcode
    Front-end developer
    Можете посмотреть на MongoDB. В ней как раз JSON-подобные документы, а в MySQL лучше не хранить так данные.
    Ответ написан
    1 комментарий
  • Поможете найти ошибку в создании бота телеграм?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    1) Код и ошибки запрещено постить картинками. Нужно текстом в соответствующем теге.
    2) Импорты всегда должны быть в начале файла (так принято по стандарту PEP8)
    3) Глупо закрашивать токен в коде, при этом оставлять его в ошибке(Facepalm)
    4) Библиотека telebot установлена?(скорее всего да)
    5) telebot.py переименуйте в что-то другое.
    Ответ написан
    2 комментария
  • Как сделать так, чтобы питон не оставался в time.sleep навечно?

    @Nickellick
    Было бы неплохо предоставить пример кода, где и как вы используете эти функции
    Ответ написан
    1 комментарий
  • В чем суть декораторов?

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

    Лирическое отступление. В питоне переменные работают не так же как в Си. В Си переменная - это ящичек, а значение в нём как бы лежит. В питоне объект - это как чайный пакетик, а имя как ярлычок на ниточке. Можно к одному пакетику несколько ярлычков привязать, то есть несколько имён. В Си это достигается указателями. В питоне, получается, всё "как бы указатели" и разыменовываются они неявно, под капотом. Но сейчас не о том...

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

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

    Итак:
    my_object_instance = MyClass()
    my_object_instance = my_decorator1(my_object_instance)
    my_object_instance2 = my_decorator2(my_object_instance)

    В этом примере дважды задекорирован объект. Здесь при первом декорировании оригинал нам, судя по коду, не нужен (или декоратор его не менял, смотря что за декоратор, может просто зарегал где-то в списке...), а при втором декорировании нам остаётся доступным и оригинал и задекорированная версия.

    Пока всё просто и не ясно причем тут собаки и чем эти декораторы отличаются от обычных функций. На второй вопрос ответ прост -- ничем особенным. Просто мы такой смысл вкладываем в эти функции. Такая абстрактная концепция.

    В Питоне есть синтаксический сахар, чтобы декорировать объявления функций и классов.

    Иногда хочется наглядно модифицировать или зарегистрировать в каком-то глобальном реестре класс или функцию, но объявление при этом сильно менять не хочется.
    Можно так:
    my_pretty_functions = {}
    
    def my_deco(decorated_function):
        '''Это декоратор, который не меняет декорируемый объект, 
        лишь регистрирует его в словаре'''
        my_pretty_functions[decorated_function.__name__] = decorated_function
        return decorated_function
    
    def my_function(x):
        return x ** 2
    
    # вот декорирование вручную, без сахара
    my_function = my_deco(my_function)
    
    # Но в питоне же есть сахар для этого, и вот альтернативный вариант декорирования:
    @my_deco
    def my_other_function(x):
        return x ** 3

    Эти два способа декорирования работают одинаково, просто "собака" - это синтаксический сахар.

    Не все декораторы такие безобидные. Декоратор может вернуть совершенно другую функцию или вообще что угодно. Тогда это что угодно окажется под оригинальным именем функции, а оригинальная функция вовсе может быть потеряна (выброшена) или засунута в новую с помощью так называемого "замыкания".

    Но замыкания - это отдельная большая история, а узнать об этом вы сможете, к примеру, на занятиях по питону на otus.ru, где я скоро, надеюсь, стану преподавать=).

    Спрашивайте сто не понятно. Я тут не рассмотрел даже малой доли от разных способов применения декораторов в народном хозяйстве. Надо будет состряпать специальный курс про это.
    Ответ написан
    Комментировать
  • В чем суть декораторов?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Комментировать
  • В чем суть декораторов?

    netpastor
    @netpastor
    Python developer
    Если совсем коротко - то декораторы позволяют тебе делать пре- и постобработку результатов выполнения функции
    Ответ написан
    Комментировать
  • В чем суть декораторов?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    если после
    https://habr.com/ru/post/141411/

    но так и не понял ничего(

    то только так:
    https://www.youtube.com/watch?v=iX_z-ePCCWw&t=39s
    Ответ написан
    Комментировать
  • Как сделать чтобы цикл for прошелся по списку и при условии True вывел текст один раз?

    @danSamara
    Цикл не нужен.
    if user in passworld:
        print('Ваш пароль найден!')
    else:
        print('пароль не найден...')


    Но если необходимо всё же через цикл, то:
    for i in passworld:  # Скобки не нужны
        if i == user:  # Скобки не нужны
            print('Ваш пароль найден!')
            break
    else:
        print('пароль не найден...')
    Ответ написан
    2 комментария
  • Какой добавить функционал боту вк?

    Хм, много, что можно добавить.
    Например, переводчик слов, просмотр погоды для Севастополя, курс доллара и евро, определение животных на картинке или текст голосовых сообщений.
    Применений - масса.
    Как вариант можно посмотреть, что уже есть.
    Ответ написан
    Комментировать
  • Какой добавить функционал боту вк?

    joeberetta
    @joeberetta
    Читай: https://epdf.pub/google-for-dummies.html
    Регулярки не знаю, пожалуйста без них

    Вот именно с них и начните. Вы же хотите прокачать скиллы, а тема, которую вы не знаете, но необходима для работы - это лучшее чему можно посвятить проект.

    Напоследок, полезный туториал на который периодически заглядываю
    Ответ написан
    Комментировать
  • Как работают точки в python?

    npanuhin
    @npanuhin
    Разберём pygame.display.set_mode((800, 600)):
    • pygame - имя модуля. Модули могут содержать классы, фунции, переменные. Можно прочитать, например, здесь
    • display (pygame.display) - класс модуля pygame. Обычный класс в каком-то файле модуля. Как из вашего примера про Person и Student
    • set_mode (pygame.display.set_mode) - функция в этом классе

    Например, создадим файл test.py:
    class Person():   # аналог display
        b = lambda x: x**2
        def count(a):   # аналог set_mode
            return 3 * a

    Тогда верна следующая конструкция (для любого файла в той же директории):
    import test
    print( test.Person.count(2) )  # выведет 6


    Так что это работает не так, как вы предложили.
    set_mode это функция, а не класс - функция в классе display.
    Ответ написан
    Комментировать
  • Как получить ориентацию в Xamarin Android?

    newross
    @newross
    Product owner
    Код выше не соотвествует задаче. В базовых доках есть пример
    public override void OnConfigurationChanged (Android.Content.Res.Configuration newConfig)
      {
        base.OnConfigurationChanged (newConfig);
                            
        if (newConfig.Orientation == Android.Content.Res.Orientation.Portrait) {
          _tv.LayoutParameters = _layoutParamsPortrait;
          _tv.Text = "Changed to portrait";
        } else if (newConfig.Orientation == Android.Content.Res.Orientation.Landscape) {
          _tv.LayoutParameters = _layoutParamsLandscape;
          _tv.Text = "Changed to landscape";
        }
      }
    }
    Ответ написан
    2 комментария
  • Как найти нужный файл?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    А не проще при создании сейва просто писать наименование файла сейва в определенный файлик?
    И в Python - просто вычитывать имя этого файла.
    Ответ написан
    Комментировать
  • AsyncIO python как не ждать ответ от функции?

    @AlexBoss
    Продолжаем
    Ваш ответ:1
    Ваш ответ:2

    import asyncio
    
    async def first():
        await asyncio.sleep(30)
        return (2)
    async def second():
        await asyncio.sleep(20)
        return (1)
        
    async def main():
        print("Продолжаем")
        for fut in asyncio.as_completed([first(), second()]):
            resp = await fut
            print(f'Ваш ответ:{resp}')
    asyncio.run(main())
    Ответ написан
    Комментировать
  • Почему не работает .gitignore?

    Decadal
    @Decadal
    gitignore работает немного не так. В нём указываются файлы, которые вы бы хотели менять локально, но не хотели бы их загружать в гит.
    А если в гите что-то изменилось, вы обязаны это получить к себе при git pull
    Ответ написан
    2 комментария