Прочитал книжку Think Python: How to Think Like a Computer Scientist — очень понравилась: вместо сухого изложения с самого начала рассматриваются маленькие программы, которые в последующих главах дорабатываются с учетом более продвинутых концепций языка. Почти в каждой главе даются подходы, которые применяются при разработке и отладке больших по объёму программ. Даны основы data science — быстродействие различных структур данных, как организована их работа под капотом и т.д.
До прочтения написал программу строк на 200 про отслеживание диеты, которая представляла мало понятный кусок кода. После прочтения книги переписал в 100 строк.
Автор понравился, поэтому на очереди Think Complexity: Complexity Science and Computational Modeling. По планам к январю хочу поднабраться знаний и приступить к автоматизации торговой системы на Python.
А это ведь не показатель. Зачастую модульность наоборот требует больше кода, из-за необходимости декомпозиции.
Вообще, если нравится лаконичность, взгляните сюда:
iolanguage.org/
Практически любую программу на питоне можно сократить раза в 2 минимум:)
Вот пример с википедии
[code]
from abc import ABCMeta, abstractmethod class Observer(metaclass=ABCMeta): """ Абстрактный наблюдатель """ @abstractmethod def update(self, message: str) -> None: """ Получение нового сообщения """ pass class Observable(metaclass=ABCMeta): """ Абстрактный наблюдаемый """ def __init__(self) -> None: """ Constructor. """ self.observers = [] # инициализация списка наблюдателей def register(self, observer: Observer) -> None: """ Регистрация нового наблюдателя на подписку """ self.observers.append(observer) def notify_observers(self, message: str) -> None: """ Передача сообщения всем наблюдателям, подписанным на события данного объекта наблюдаемого класса """ for observer in self.observers: observer.update(message) class Newspaper(Observable): """ Газета, за новостями в которой следят тысячи людей """ def add_news(self, news: str) -> None: """ Выпуск очередной новости """ self.notify_observers(news) class Citizen(Observer): """ Обычный гражданин, который любит читнуть с утра любимую газетку """ def __init__(self, name: str) -> None: """ Constructor. :param name: имя гражданина, чтоб не спутать его с кем-то другим """ self.name = name def update(self, message: str) -> None: """ Получение очередной новости """ print('{} узнал следующее: {}'.format(self.name, message)) if __name__ == '__main__': newspaper = Newspaper() # создаем небольшую газету newspaper.register(Citizen('Иван')) # добавляем двух человек, которые newspaper.register(Citizen('Василий')) # ... ее регулярно выписывают # ... и вбрасываем очередную газетную утку newspaper.add_news('Наблюдатель - поведенческий шаблон проектирования') ''' Иван узнал следующее: Наблюдатель - поведенческий шаблон проектирования Василий узнал следующее: Наблюдатель - поведенческий шаблон проектирования[/code]
[code]
Observer := Object clone Observable := List clone do( register := getSlot("push") notify := method(message, self foreach(observer, observer update(message))) ) Newspaper := Observable clone do( addNews := method(news, notify(news))) Citizen := Observer clone do( create := method(name, self clone lexicalDo(name := name)) update := method(message, writeln( name .. " узнал следующее: " .. message)) ) newspaper := Newspaper clone newspaper do( register(Citizen create("Иван")) register(Citizen create("Василий")) addNews("Наблюдатель - поведенческий шаблон проектирования") ) #>>>> Иван узнал следующее: Наблюдатель - поведенческий шаблон проектирования #>>>> Василий узнал следующее: Наблюдатель - поведенческий шаблон проектирования[/code]
sortarray sortarray, python как-то особо не помогает думать как computer scientist. Скорее книга о том, как стоит подходить к написанию программ, на примере питона, что на самом деле стоит за некоторыми языковыми конструкциями. Книжка начального уровня и не претендует на какое-то всеобъемлющее изложение, но мне она понравилась своим подходом и позволила переписать маленькую программу более кратко и самое главное более понятно.
https://rutracker.org/forum/viewtopic.php?t=5340980
А вот крутить вертеть графики и отчеты одно удовольствие.