• В чём отличие @Decorator от @Decorator()?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Декоратор - это функция, которой на вход подаётся функция и вернуть он должен тоже функцию. Например:
    @decorator 
    def foo():
     ..

    Эквивалентно foo = decorator(foo)

    Теперь про случай из вопроса. В качестве декоратора вместо обычной функции вы используете класс (точнее его объект):
    @FuncDec()
    def foo():
        print('Hello')

    Эквивалентно foo = FuncDec()(foo), а именно:
    • создаётся объект FuncDec (вызывается конструктор __init__)
    • этот объект вызывается (__call__) вместе с параметром foo
    • объект вернул функцию wrapper, которая и будет в дальнейшем выполняться вместо объявленной foo
    • профит

    Но если убрать скобки, то получится эквивалент foo = FuncDec(foo)
    То есть просто вызов конструктора, который у вас не принимает параметров - поэтому и ругается.
    Ответ написан
    Комментировать
  • Как сделать нужный порядок при отображении моделей в админке Django?

    JawsIk
    @JawsIk Автор вопроса
    Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)
    В общем нашёл я функцию сортировки. Сортирует она в функции get_app_list класса AdminSite. Затем по указанию Pavel Denisov стал искать способы решения. Находил разные варианты, поэтому объединив получил следующий вариант. Все манипуляции происходят в файле admin.py.
    Тут сразу хочется сделать некое отступление, что при переназначении регистрации, из админки пропадают Пользователи и группы и поэтому их нужно туда зарегистрировать самостоятельно. Но обо всём по порядку.

    1. Делаем необходимый импорт:
    from django.contrib.admin import AdminSite
    from django.contrib.auth.models import Group, User
    from django.contrib.auth.admin import GroupAdmin, UserAdmin

    2. Определяем свой класс, наследуясь от AdminSite и в нём переписываем функцию. (в моём случае я просто закомментировал цикл сортировки):
    class MyAdminSite(AdminSite):
    
        def get_app_list(self, request):
            """
            Return a sorted list of all the installed apps that have been
            registered in this site.
            """
            app_dict = self._build_app_dict(request)
    
            # Sort the apps alphabetically.
            app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())
    
            # Sort the models alphabetically within each app.
            #for app in app_list:
            #    app['models'].sort(key=lambda x: x['name'])
    
            return app_list


    3. Подменяем admin.site своим собственным:
    admin.site = MyAdminSite()

    4. Регистрируем своим модели:
    # Register your models here.
    admin.site.register(TypeProfile)
    admin.site.register(TypeFacade) 
    admin.site.register(Price)
    admin.site.register(PaintColor)
    admin.site.register(PatinaColor)
    admin.site.register(Materials)
    admin.site.register(Category)
    admin.site.register(Products)

    5. Регистрируем стандартные модели:
    #Регистрируем стандартные
    admin.site.register(Group, GroupAdmin)
    admin.site.register(User, UserAdmin)


    И всё работает как надо.
    Всем спасибо.
    Ответ написан
    2 комментария
  • Скрипт на python для загрузки фото?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Кратко опиши ситуацию.

    Кратко дам ответ - Хабр Фриланс
    Ответ написан
    Комментировать
  • Как создать из списка подсписки и посчитать частоту повторения?

    adugin
    @adugin Куратор тега Python
    Вариант с numpy:
    import numpy as np
    
    a = [0, 1, 1, 2, 1, 3, 4, 4, 5, 4]
    
    N = len(a)
    a = np.array(a)
    
    for n in range(3, N):
        if N % n == 0:
            b = a.reshape(-1, n)
            b = np.diff(b, axis=1)
            if np.all(b == b[0]):
                print(n)

    Вариант без внешних библиотек:
    from operator import sub
    
    a = [0, 1, 1, 2, 1, 3, 4, 4, 5, 4]
    
    N = len(a)
    
    for n in range(3, N):
        if N % n != 0:
            continue
        matrix = list(zip(*[iter(a)]*n))
        for i, row in enumerate(matrix):
            matrix[i] = map(sub, row[1:], row[:-1])
        transposed = zip(matrix)
        row_to_set = map(set, transposed)
        set_to_len = map(len, row_to_set)
        if len(set(set_to_len)) == 1:
            print(n)
    Ответ написан
  • Как создать из списка подсписки и посчитать частоту повторения?

    @o5a
    Насколько понял задачу, нужно постепенно перебирая равные куски списка найти наибольшие, при которых все куски будут иметь одинаковые "уникальные индексы".

    Изменил код на поиск наименьшего периода.

    # рассчитываем "уникальные индексы" списка
    def unique_index(arr):
        elems = []
        for e in arr:
            if e not in elems:
                elems.append(e)
        indexes = {v:i for i,v in enumerate(elems)}
        result = [indexes[e] for e in arr]
        return result
    
    # собственно функция поиска максимального числа
    def find_min_period(arr):
        for i in range(3, len(arr)//2+1):
            # если делится на части
            if not len(arr)%i:
                # "уникальный индекс" 1-го куска
                unique = unique_index(arr[:i])
                # делим на части и проверяем, чтобы для каждой "уникальный индекс" был одинаковый
                for j in range(i, len(arr), i):
                    # при первом несовпадении сразу переходим к следующему делителю
                    if unique != unique_index(arr[j:j+i]):
                        break
                else:
                    # если все куски оказались с одинаковыми "уникальными индексами" выдаем наше число элементов
                    return i
        return None
    
    print(find_min_period([0, 1, 1, 2, 1, 3, 4, 4, 5, 4, 5, 6, 6, 3, 6]))
    # 5
    print(find_min_period([0, 1, 1, 2, 1, 1, 3, 4, 4, 40, 4, 4]))
    # 3
    print(find_min_period([0, 1, 1, 2, 1, 1, 3, 4, 4, 4, 4, 12]))
    # None
    Ответ написан
  • Из-за чего возникает ошибка ORA-02002?

    Lorien_Elf
    @Lorien_Elf
    Keep calm and drop database
    Какая версия БД?

    ORA-600 указывает на баг, судя по всему https://support.oracle.com/epmos/faces/DocumentDis... (нужен доступ на металинк).

    Установите параметры
    AUDIT_SYS_OPERATIONS = FALSE
    AUDIT_TRAIL=NONE
    на время импорта, а потом верните к прежним значениям. Возможно, потребуется перезапуск инстанса.
    Ответ написан
    1 комментарий
  • Как попасть на интервью или как найти работу Python junior/intern разработчиком?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    1. Если устраиваешься на работу в русско-язычную компанию, то и резюме должно быть на русском.
    2. Ты устраиваешься на работу программистом, а не деплоером приложений на хероку. Это хорошо, что твои приложения где то запущены, но работодателей интересует твой код, его и показывай.
    I like people, not only books. In my childhood I figured out that I should think about how
    other people feel, this led to desire to be a psychologist but after playing with computers I
    discovered that programming can solve so much more.

    Чет вообще в голос. Без обид, паста крутая. Какое она отношение имеет к твоим профессиональным качествам?
    3. Это хорошо, что ты перечислил книжечки, которые ты прочитал, но они должны быть ни как не в пункте твоих знаний.

    Из твоего резюме понятно только то, что ты умеешь чета там на хероку заливать, прочитал несколько книг и философствуешь на уровне пьяного одноклассника. Из 160 заявок 2 отклика с таким резюме - предел мечтаний. Посмотри в интернете примеры резюме, их куча.

    P.S. Зашел в git... Убери "Junior Python developer" и как минимум "Git" и "Flask" из навыков. Видно, что ты даже документацию Flask не осилил, вероятнее всего и с Django такая же ситуация.
    P.S.2. Если ты по гайдам с sqlalchemy разобрался - это не означает, что есть смысл пихать PostgreSQL в список навыков.
    Ответ написан
    Комментировать
  • Что значит "стандартный ввод" в олимпиадах по программированию?

    NeiroNx
    @NeiroNx
    Программист
    На самом деле в консоли 3 потока данных 2 на вывод(stdout,stderr) и один на ввод (stdin).
    В питоне print() по умочанию отправляет данные в stdout, а input() получает данные из stdin
    B stderr идет вывод ошибок. Консольное окно показывает по умолчанию оба stdout,stderr

    В питоне для прямой записи и чтения используют sys.stdout.write(), sys.stderr.write(), sys.stdin.readline() или sys.stdin.read()
    если нужно прямое взаимодействие с потоком - напрмер считывать в консоли нажатия клавиш - без Enter.
    Ответ написан
    Комментировать
  • Как в Python присвоить нескольким переменным одинаковое значение?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    огда запись a, b, c = [[]] * 3 не подойдёт, так как хоть для каждой переменной и создастся отдельный пустой список, но из-за того, что все они будут внутри ещё одного списка алгоритм не будет правильно работать.

    Не отдельный, а тот е самый. И всё будет правильно работать, разве что все переменные получат одини тот же пустой список.
    Однако, если вам нужен такой грязный код и вы при этом экономите на длине строки, значит что-то вы делаете неправильно.
    locals().update({k:[] for k in 'abcd'})
    Такой код только запутывает, а огромное число одинаковых переменных говорит, что вам их лучше положить в словарь или матрицу.
    Ответ написан
    5 комментариев
  • Как можно оптимизировать код подсчета букв в строке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    sum(map(str.isalpha, a))
    Ответ написан
    Комментировать
  • Как получить поле с id модели из другой модели в Django?

    @AstraVlad
    Финансист, консультант, программист-любитель
    category.service_id.pk?
    Ответ написан
    Комментировать
  • Как в Python объединить списки?

    meaqese
    @meaqese
    with open('source.txt', 'r') as source, open('result.txt', 'w') as result_file:
        lines = source.readlines()
    
        result = ', '.join(f'"{x}": "{y}"' for x, y in zip(*lines))
        result_file.write(result)
    Ответ написан
    1 комментарий
  • Как получить номер недели года?

    milssky
    @milssky
    Координатор племени фиолетовых обезьянок
    Например, можно дёрнуть это
    Номер недели -- второй элемент кортежа по счету. Подробнее см документацию
    import datetime
    
    print(datetime.date(2020,9,1).isocalendar())
    Ответ написан
    Комментировать
  • Что не так с моим парсером на python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Я уже здесь неоднократно советовал, возьмите себе за правило, перед любым парсингом, загрузите страницу с помощью скрипта себе на диск. Далее откройте страницу в текстовом редакторе, и поищите - есть ли нужный элемент с нужным классом(или id) в html. Если есть, значит можно работать requests'том. В противном случае - Selenium (есть еще XHR...).
    Вот сам код:
    import requests
    
    headers = {'user-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0',
    			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    }
    
    url = 'ссылка'
    filename = 'index.html'
    
    response = requests.get(url,headers=headers)
    if response.status_code == 200:
        with open(filename,'w') as file:
            file.write(response.text)
    else:
    	print(response)

    Вписываете ссылку и запускаете скрипт. Если все ОК - на диске появится файл index.html(на этом файле можно дальше тренироваться с парсингом). В противном случае - в консоль вылетит HTTP код ошибки. Если ошибка, подставляете заголовки, cookies ... и заново.

    Конкретно в данном случае, элемента div с классом play-detail в html нет. Он появиться после обработки js скриптов js движком. Но выход есть. Все данные есть. Но они в формате json в теге script с id (если не ошибаюсь) - json-extras.
    Ответ написан
    1 комментарий
  • Как учить Git и какой уровень требуется для работы?

    GavriKos
    @GavriKos
    Не мучайте себя и используйте гуишный клиент, а не консоль. Если очень любопытно - у большинства из них есть вывод лога в формате тех же команд
    Когда поймете, ЧТО конкретно вы делаете - спроецировать на команды будет уже проще.
    Ответ написан
    Комментировать
  • Вывод ошибок скрипта Python в файл?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    перенаправить все что он выводит

    python test.py >& log.txt
    Ответ написан
    Комментировать
  • Как записывать экран при помощи Python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Как захватить видео с экрана на python3?
    Работа с видео - запись рабочего стола при помощи ...
    Сколько искал, не смог найти
    Я просто скопировал ваш вопрос, и вставил в google:
    spoiler
    5f312d7617cf5282461801.png
    Ответ написан
    2 комментария
  • Где можно найти шаблоны figma для прототипов?

    iamd503
    @iamd503
    Верстальщик
    Ответ написан
    Комментировать
  • Ошибка в Python 3.6(Jupyter Notebook)?

    @GeneD88
    QA
    Предположу, что, что бы был доступ к a, нужно заранить cell[1] -> cell[2] -> потом уже cell[3]. А так, вы написали код по частям, а затем попытались исполнить сразу cell[3]
    Ответ написан
    Комментировать