#python #объекты
В книге Д.Бизли «Python. Подробный справочник» есть такое суждение: Тот факт, что все объекты в языке Python являются объектами первого класса, зачастую недооценивается начинающими программистами, тогда как это позволяет писать очень компактные и гибкие программы. Например, предположим, что имеется текстовая строка, такая как “GOOG,100,490.10”, и вам необходимо превратить ее в список полей, попутно выполнив необходимые преобразования типов. Ниже приводится грамотный способ реализации такого преобразования: создается список типов (которые также являются объектами первого класса) и выполняется несколько простых операций по обработке списка: >>> line = "GOOG,100,490.10" >>> field_types = [str, int, float] >>> raw_fields = line.split(',') >>> fields = [ty(val) for ty,val in zip(field_types,raw_fields)] >>> fields [‘GOOG’, 100, 490.10000000000002] A есть ли еще какие полезные "для новичка" примеры использования этой особенности языка Python? А то кажется, что это больше похоже на источник головоломных ошибок.
Ответы
Ответ 1
Мне кажется в данном контексте можно сделать несколько показательных примеров с функциями, которые можно: передавать в качестве аргументов возвращать сохранять в переменную (как ссылку на функцию) Пример: пусть нам дана двумерная матрица и необходимо найти некоторые характеристики (минимум, максимум и среднее) для каждой строки: In [15]: import random In [16]: A = [[random.randint(0, 10) for _ in range(10)] for _ in range(10)] In [17]: A Out[17]: [[6, 9, 6, 2, 0, 4, 3, 4, 5, 7], [2, 6, 6, 0, 8, 8, 6, 5, 2, 5], [10, 6, 0, 10, 1, 5, 8, 10, 9, 9], [3, 0, 4, 0, 0, 2, 1, 2, 8, 6], [5, 10, 8, 7, 8, 3, 0, 5, 0, 8], [9, 7, 2, 0, 8, 5, 0, 4, 4, 9], [9, 3, 8, 6, 6, 10, 5, 0, 0, 1], [7, 3, 2, 4, 5, 0, 0, 9, 0, 10], [8, 7, 10, 2, 6, 7, 2, 6, 2, 1], [3, 3, 1, 1, 1, 4, 8, 0, 3, 4]] In [18]: funcs = [min, max, lambda x: sum(x)/len(x)] In [19]: [[f(lst) for f in funcs] for lst in A] Out[19]: [[0, 9, 4.6], [0, 8, 4.8], [0, 10, 6.8], [0, 8, 2.6], [0, 10, 5.4], [0, 9, 4.8], [0, 10, 4.8], [0, 10, 4.0], [1, 10, 5.1], [0, 8, 2.8]] теперь для того, чтобы добавить новые характеристики, например сумму значений в каждой строке, достаточно будет добавить имя функции в список funcs - остальной код остается неизменным: In [20]: funcs.append(sum) In [21]: [[f(lst) for f in funcs] for lst in A] Out[21]: [[0, 9, 4.6, 46], [0, 8, 4.8, 48], [0, 10, 6.8, 68], [0, 8, 2.6, 26], [0, 10, 5.4, 54], [0, 9, 4.8, 48], [0, 10, 4.8, 48], [0, 10, 4.0, 40], [1, 10, 5.1, 51], [0, 8, 2.8, 28]]
Комментариев нет:
Отправить комментарий