Как стать автором
Обновить

Комментарии 20

Функции в Python могут возвращать более одной переменной без словаря, списка или класса
кортежи не считаются, видимо
>>> a = 1, 2
>>> a
(1, 2)
>>> type(a)
<class 'tuple'>
> Это нормально для ограниченного числа возвращаемых значений. Но все, что превышает 3 значения, должно быть помещено в (data) класс.

Без (data) класса будет ошибка?
Без (data) класса «потомки» проклянут

Каша, где надо будет помнить кто на ком стоял в порядке вывода.
Хотя, некоторые именно так и живут(аддоны WoW на Lua, я на Вас смотрю!), с этими


local _, _, _, _, _, itemType, itemSubType = GetItemInfo(itemID)
*_, itemType, itemSubtype = GetItemInfo(itemID)

Это если нужное в хвосте или в начале. А ежели в середине — нужно снова уточнять порядок выходных аргументов. И работает только если этот порядок не изменяется.


Вот тут датакласс даже в простейшей форме отлично заменил бы и был удобней в применении.

функции сортировки обеспечивают стабильный порядок сортировки
В русском языке нет термина «стабильный порядок сортировки», зато есть термин «устойчивая сортировка». Вы объявляете себя «школой по программированию», но при этом не знаете русской терминологии?

Кажется, в данном случае корректно переводить термины "напрямую". Все равно подавляющее большинство людей используют английскую терминологию.
У меня, например, было несколько случаев, когда я не понимал русскую терминологию. Особенно это проявляется в тех ситуациях, когда термины еще и сокращают. Простым примером может служить GCD, который у нас принято называть НОД.
Да и с точки зрения написания/чтения кода неудобно туда-сюда переводить термины.


Учитывая приведенные мной аргументы, можно сказать, что школа как раз-таки делает жизнь своих учеников проще, при этом не срезая углы

Не говорите за всех. Там, где есть устоявшийся русскоязычный термин – следует его и использовать, а не создавать новую терминологию.

import operator
people.sort(key=operator.itemgetter('age'))
people.sort(key=operator.itemgetter('name'))


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

people.sort(key=lambda item: (item['name'], item['age']))


Ну и не вполне корректно выдавать списковые включения, классы данных и возврат нескольких значений за какие-то трюки опытных программистов. Это вполне обычные элементы языка.
Хотя, конечно, статью «8 рандомно надёрганных элементов Питона» прочитало бы меньше людей.
Вы выполняете сортировку дважды
это не они — материал переводной, а автор даже не распознал кортеж в последнем примере

people.sort(key=operator.itemgetter(' age ', ' name ')


Вот так работает тоже. Странный пример у автора конечно, видно тупо перевели, а примеры ее проверили.


Все равно спасибо всем за практику и некоторые примеры возьму в применение.

Не работает так сортировка по обоим ключам. Выдает что первое стоит только:

people = [
    {'name': 'Mike', 'age': 30},
    {'name': 'Tom', 'age': 21},
    {'name': 'Sarah', 'age': 34},
    {'name': 'Jack', 'age': 45},
    {'name': 'Piter', 'age': 13},
    {'name': 'Vasja', 'age': 23},
    {'name': 'Lora', 'age': 27}
]


people.sort(key=lambda item: (item['name'], item['age']))
for i in people:
    print(i)


Ответ:

{'name': 'Jack', 'age': 45}
{'name': 'Lora', 'age': 27}
{'name': 'Mike', 'age': 30}
{'name': 'Piter', 'age': 13}
{'name': 'Sarah', 'age': 34}
{'name': 'Tom', 'age': 21}
{'name': 'Vasja', 'age': 23}

сортирует только по имени, ну или по первому вхождению ключа

Вообще существует способ отсортировать оба параметра?
Не вполне понял ваш комментарий.
У вас в примере ни одно имя не повторяется. Для таких данных сортировка по двум ключам ни чем не будет отличаться от сортировки только по имени. Увидеть как работает сортировка по двум параметрам можно только на данных, в которых есть повторения по первому параметру.
Начиная с версии 3.7, Python предлагает классы данных

никогда не слышал чтоб так называли
датаклассы — так говорят

Так автор в оригинале написал, буквально через пробел.

Упомянут генератор списка но не упомянут простой генератор через круглые скобки, который будет в большинстве случаев эффективнее.
А также создание множества (set) и словаря (dict)

Уж никак не мог подумать что list comprehension это «трюк» для «опытных программистов»

dataclass чем то похожи на слоты))

Не совсем, в dataclass можно использовать __slots__ и оптимизация по памяти будет обеспечена в любом случае)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий