Задать вопрос
WEB, Python, Django, DevOps
Контакты
Местоположение
Россия, Москва и Московская обл.

Достижения

Все достижения (14)

Наибольший вклад в теги

Все теги (76)

Лучшие ответы пользователя

Все ответы (130)
  • В чём отличие @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)
    То есть просто вызов конструктора, который у вас не принимает параметров - поэтому и ругается.
    Ответ написан
    Комментировать
  • Почему кол-во элементов в списке равно 0?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Не strip, а str.split:
    string = 'foo.bar.test.ru'
    length = len(string.split('.'))
    print(length)

    https://ideone.com/IabPw7
    И не рекомендуется перекрывать именами своих переменных стандартные типы (это я про str)
    Ответ написан
    Комментировать
  • Не могу понять, почему python выкидывает исключение?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Вы результат преобразования никуда не сохраняете.
    Вот так работает без ошибок:
    a = input()
    b = input()
    l = input()
    N = input()
    
    a = int(a)
    b = int(b)
    l = int(l)
    N = int(N)
    
    lenl = 2 * l
    lena = (2 * N - 1) * a
    lenb = 2*b *(N - 1)
    sumlab = lenl + lena + lenb
    print(sumlab)


    или можно преобразовать сразу там же, где происходит ввод:
    a = int(input())
    b = int(input())
    l = int(input())
    N = int(input())
    
    lenl = 2 * l
    lena = (2 * N - 1) * a
    lenb = 2*b *(N - 1)
    sumlab = lenl + lena + lenb
    print(sumlab)
    Ответ написан
    2 комментария
  • Как изменить имена ключей в словаре python?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Возможности просто переименовать ключ в словарях питона нет.

    Пример присваивания новому ключу значение из старого ключа, с удалением старого ключа.
    dictionary[new_key] = dictionary.pop(old_key)

    Если же вопрос ваш в том, как построить сам алгоритм замены, то могу предложить следующий:

    # словарь
    d1 = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}
    # словарь замен: ключ - исходный ключ из d1, значение - на какой ключ его меняем
    replacements = {1: 'one', 4: 'four', 5: 'five'}
    
    for i in d1:
        if i in replacements:
            d1[replacements[i]] = d1.pop(i)
    Ответ написан
    5 комментариев
  • Зачем нужна сериализация?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Сериализация:
    • это обобщённый процесс для структур языка программирования.
    • нужна для любого взаимодействия в системе, выходящего за рамки передачи данных в текущем скрипте: даже если вам кажется, что она не используется - это не так, она всё равно используется под капотом.

    Сериализация гарантирует (для поддерживаемых структур данных), что после процесса сериализации/десериализации вы получите те же самые структуры данных.

    Не будь её, вам бы понадобилось вручную создавать свои протоколы и методы перевода данных в вид, пригодный для передачи куда-либо.
    Ну и, модуль pickle - это встроенная реализация сериализации, но в то же время - одна из многих. Вы можете использовать, например, json, или yaml. Что угодно, что переведёт обычные структуры данных в пригодную для передачи форму (строку, байтовая строка) и вернёт (десериализует) обратно.
    Ответ написан
    7 комментариев

Лучшие вопросы пользователя

Все вопросы (9)