# Введение ## Прикладное программирование * Синтаксис языка программирования (шпаргалка) * Типы данных языка * Приёмы работы (best practice) * Платформа * стандартная библиотека (`os`, `sys`, `glob`, …) * сторонние библиотеки (`numpy`, `matplotlib`, `scipy`, …) * способ установки (`pip`, `wheel`, `setup.py`) * Средства разработки (IDE, VCS, отладчик, модульные тесты…) * Алгоритмы ## Python ### Почему Python? * Лаконичный, емкий и простой синтаксис * Кроссплатформенность * Открытое ПО * Богатая стандартная библиотека * Огромное количество доступных для загрузки библиотек, в том числе для решения научных задач * Огромное сообщество разработчиков * Простота интеграции с библиотеками написанными на C ### Почему не Python? * Производительность (время разработчика дороже времени компьютера) * Непривычный по сравнению с C/C++/C#/Java синтаксис * Больше ошибок времени исполнения из-за динамической типизация * Не всегда есть исчерпывающая документация, особенно по сторонним модулям * Нет IDE с поддержкой визуального создания пользовательского интерфейса * Сложно создавать самостоятельные приложения для Windows и Mac ### Для чего применяют Python? * Гармонизация данных * Научное программирование ([Spyder](https://www.spyder-ide.org/), [Jupyter](https://jupyter.org/), [PyZo](https://pyzo.org/start.html), …) * Вычисления и анализа данных ([NumPy](https://numpy.org/doc/stable/user/index.html#user), [SciPy](https://docs.scipy.org/doc/scipy/tutorial/index.html#user-guide), [pandas](https://pandas.pydata.org/docs/user_guide/index.html#user-guide), …) * Визуализация ([matplotlib](https://matplotlib.org/stable/users/index), [plotly](https://plotly.com/python/getting-started/), [plotnine](https://plotnine.org/gallery/), …) * Решение задач в конкретных предметных областях ([ObsPy](https://docs.obspy.org/), [pyGIMLi](https://www.pygimli.org/), …) * Построение веб-приложений ([Django](https://docs.djangoproject.com/), [Flask](https://flask.palletsprojects.com/en/3.0.x/quickstart/), …) * Макросы и текстовая консоль для приложений ([Blender](https://www.blender.org), [QGis](https://qgis.org), [LibreOffice](https://ru.libreoffice.org), …) * Метапрограммирование ([Keras](https://keras.io/), [FEniCSx](https://fenicsproject.org/documentation/), …) * Прототипирование ПО * Утилиты для системного администрирования ([Ansible](https://docs.ansible.com/ansible/latest/index.html), [Fabric](https://fabricmc.net/), [Shinken](https://github.com/shinken-solutions/shinken), …) ### Python2 и Python3 До недавнего времени существовали две не вполне совместимые между собой версии языка Python: Python2 и Python3, для любознательных: подробный разбор различий. Поддержка Python2 была прекращена в 2020 году. Динамику перехода различных библиотек можно посмотреть на http://www.python3statement.org/. Процесс перехода на Python3 занял более 10 лет, за это время появились инструменты автоматического перевода программ Python2 → Python3 и средства позволяющие писать код совместимый с обеими версиями языка. До сих пор существует некоторое количество программ написанных на Python2, однако их число постепенно сокращается. ### Что еще нужно знать о версиях Python? * В данном курсе мы будем рассматривать только Python 3 и ориентироваться на такущую актуальную версию Python 3.13. * Эталонная реализация языка — СPython, есть и другие. * Последняя на сегодняшний день стабильная версия эталонной реализации — СPython 3.10. * Все версии 3.* прямо (но не обратно) совместимы, хотя различия и не велики. * CPython 3.4 — последняя версия, поддерживающая Windows XP, CPython 3.8 — последняя версия, поддерживающая Windows 7 ## Источники ### Официальная документация * [Справка по языку и стандартной библиотеке: docs.python.org](https://docs.python.org/3/library/index.html) ### Важнейшие сторонние библиотеки для научного программирования * [Вычисления: модуль numpy](https://docs.scipy.org/doc/numpy/) * [Матметоды: модуль scipy](https://docs.scipy.org/doc/scipy/) * [Рисование графиков: модуль matplotlib](https://matplotlib.org/contents.html) * [Работа с табличными данными: модуль pandas](https://pandas.pydata.org/docs/user_guide/index.html#user-guide) * [Построение карт: модуль cartopy](https://scitools.org.uk/cartopy/docs/v0.21/index.html) ### Важнейшие сторонние библиотеки для решения геофизических задач * [Обработка сейсмоданных: модуль ObsPy](https://docs.obspy.org/contents.html) * [Решение задач магнито- и гравиразведки: модуль pyGIMLi](https://www.pygimli.org/documentation.html) ### Курсы для начинающих * [Питонтьютер (на русском)](https://pythontutor.ru/lessons/inout_and_arithmetic_operations/) * [METANIT.COM — Язык программирования Python (на русском)](https://metanit.com/python/tutorial/2.1.php) * [Python 101](https://www.python101.pythonlibrary.org/index.html) ### Курсы для продолжающих * [Scipy Lecture Notes — One document to learn numerics, science, and data with Python](http://www.scipy-lectures.org/) * [Bernd Klein — Python course (Python 2 and 3, Numerical Python, Machine Learning, Tkinter Tutorial)](https://www.python-course.eu/) * [Hans Petter Langtangen, Leif Rune Hellevik — A very basic introduction to scientific Python programming](http://hplgit.github.io/bumpy/doc/pub/basics.pdf) ### Шпаргалки * [Python Cheatsheet Based on the book Automate the Boring Stuff with Python and many other sources](https://www.pythoncheatsheet.org/) * [Comprehensive Python Cheatsheet by Jure Šorn](https://gto76.github.io/python-cheatsheet/) * [WebsiteSetup Python Cheat Sheet](https://websitesetup.org/wp-content/uploads/2021/04/Python-cheat-sheet-April-2021.pdf) ### Сайты * [LeetCode — сайт для решения алгоритмических задач (в том числе на Python)](https://leetcode.com/) * [Семён Лукашевский — PyProg.Pro (на русском)](https://pyprog.pro/) * [Про Python (на русском)](http://pythonz.net/) * [Python для начинающих (на русском)](https://pythonworld.ru/) ### Книги * [Allen B. Downey — Think Python: How to Think Like a Computer Scientist, 2nd Edition](http://greenteapress.com/thinkpython2/html/index.html) * [Al Sweigart — Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) * [Qingkai Kong, Timmy Siauw, Alexandre Bayen — Python Programming And Numerical Methods: A Guide For Engineers And Scientists](https://pythonnumericalmethods.berkeley.edu/notebooks/Index.html) * [Intermediate Python (на русском)](https://pavel-karateev.gitbook.io/intermediate-python/) [Intermediate Python (на английском)](http://book.pythontips.com/en/latest/index.html) * [Mark Pilgrim — Dive into Python 3](http://www.diveintopython3.net/index.html) * [Hans Petter Langtangen, Svein Linge — Finite Difference Computing with PDEs - A Modern Software Approach](https://hplgit.github.io/fdm-book/doc/pub/book/pdf/fdm-book-4print-2up.pdf) * [Hans Petter Langtangen — A worked example on scientific computing with Python](http://hplgit.github.io/bumpy/doc/pub/bumpy.pdf) ### Рецепты, статьи и Q&A * [StackOverflow / Python](https://stackoverflow.com/questions/tagged/python)