Выбираем язык программирования: что нужно знать о python
Содержание:
- Плюсы и минусы профессии
- Расширения
- Типовые ошибки Python-разработчиков на собеседованиях
- Так что же с классами?
- Крутая документация
- Как проверяют опыт работы?
- Почему GIL не был удалён в Python 3?
- Как найти работу начинающему специалисту?
- Где найти Python-разработчика на проект?
- Часть 4. Некоторые полезные репозитории GitHub по программированию и машинному обучению
- Влияние GIL на многопоточные приложения
- Замыкание
- Как стать Python-разработчиком
- Python-программист: кто это и чем занимается
- Что такое питон простыми словами
- Пишем программу 3D-моделирования в 500 строках кода
- Введение
- Где используется язык Python?
- Функции в Python
- Профессиональные навыки
Плюсы и минусы профессии
Плюсы профессии: |
Минусы профессии: |
|
|
Расширения
Python обучает объектно-ориентированному стилю программирования, причем здесь это не просто вариант: здесь все – объекты. Это позволяет быстрее и легче писать мультимодульные приложения и, следовательно, обмениваться кодом с командой проекта.
Создавать свой модуль из любого кода проще простого. В разных файлах мы открываем свой модуль командой «import module», и это всё.
Python предоставляет пользователям множество готовых модулей и библиотек. Эти модули позволяют писать быстрее код для графического пользовательского интерфейса, математических вычислений, создания сетевых приложений и игр.
Типовые ошибки Python-разработчиков на собеседованиях
Всем привет, сегодня я хотел бы поговорить о некоторых сложностях и заблуждениях, которые встречаются у многих соискателей. Наша компания активно растет, и я часто провожу или участвую в проведении собеседований. В итоге я выделил несколько вопросов, которые многих кандидатов ставят в сложное положение. Давайте вместе рассмотрим их. Я опишу специфические вопросы для Python, но в целом статья подойдет для любого собеседования. Для опытных разработчиков никаких истин тут открыто не будет, но тем, кто только начинает свой путь, будет легче определиться с темами на ближайшие несколько дней.
Так что же с классами?
Вернёмся к классам, классы, как и функции, тоже могут принимать какие-то аргументы, давайте уже напишем свой первый класс!
Итак, мы видим что ключевое слово def заменено на слово class, и убраны скобки после имени функции, а так это очень похоже на объявление функции! Что же мы сделали? Мы прописали инструкции, по которым будет создан объект Example() просто, и понятно, так что там с аргументами класса? На самом деле внутри класса образуется не только а =. 1, а ещё много разных функций, и одна из них имеет имя
И на самом деле когда мы создаём объект Example, вызывается эта функция, и на самом деле создание объекта выглядит так:
Да! Сразу после создания нашего объекта, из него вызывается функция в которую и можно передать аргументы! Пример:
Разбираемся! Мы создали внутри класса функцию которая вызывается после создания объекта, значит мы можем передать вместо n какой то аргумент, и он попадет в объект после его создания, что мы и делаем ниже! Так а что за загадочный self? Об этом поговорим в следующих статьях.
P.S.
Фухх, это было непросто, но, думаю я справился, объяснил так чтобы поняли все, до встречи!
Крутая документация
Попробуйте загуглить , или, например .
В первых результатах будет ссылка на https://docs.python.org – сайт официальной документации.
Это потому что документация очень подробная: в ней есть материалы для новичков, доки к каждому модулю, рекомендации
по использованию, подводные камни и дальнейшее чтение. И это всё – для каждой версии языка.
Такой удобной и подробной документации нет ни у кого.
А ещё есть http://stackoverflow.com/ – сайт, на котором одни программисты отвечают
другим программистам на вопросы о программировании. За время его существования там были заданы все возможные вопросы.
Серьёзно: любой вопрос в духе “как это сделать на Питоне” или “почему этот код не работает”
уже был задан, просмотрен и отвечен.
Всё это делает процесс изучения и написания кода быстрым: вся нужная информация находится на расстоянии одного
удачного поискового запроса.
Какого из этих вопросов нет в официальных FAQ официальной документации?
*o Why am I getting strange results with simple arithmetic operations?
*o Why is Python installed on my machine?
*o How can I implement base abstract factory class in Python?
*o Writing C is hard; are there any alternatives?
Как проверяют опыт работы?
Обычно опыт работы для начинающих специалистов не обязателен. Но на некоторые вакансии ищут кандидатов с опытом от полугода — года или соискателей, которые прошли стажировку. Если вы нигде не работали, приготовьтесь рассказать про законченные учебные и личные проекты. Личными проектами также интересуются, чтобы проверить заинтересованность кандидата в профессии и его стремление к развитию.
Завершённые проекты можно опубликовать, например, в личном профиле на GitHub или создать сайт-портфолио. На собеседовании вы сможете рассказать, какая перед вами стояла задача, какие технологии вы выбрали и почему. Дополнительные проекты помогут не только прокачать навыки, но и выделиться среди других кандидатов.
Почему GIL не был удалён в Python 3?
Python 3 на самом деле имел возможность переделки некоторых функций с нуля, хотя из-за этого многие расширения на С попросту сломались бы и их пришлось бы переделывать. Именно из-за этого первые версии Python 3 так слабо расходились по сообществу.
Но почему бы параллельно с обновлением Python 3 не удалить GIL?
Его удаление сделает однопоточность в Python 3 медленней по сравнению с Python 2 и просто представьте, во что это выльется. Нельзя не заметить преимущества однопоточности в GIL. Именно поэтому он всё ещё не удалён.
Но в Python 3 действительно появились улучшения для существующего GIL. До этого момента в статье рассказывалось о влиянии GIL на многопоточные программы, которые затрагивают только процессор или только I/O. А что насчёт тех программ, у которых часть потоков идут на процессор, а часть на I/O?
В таких программах I/O-потоки «страдают» из-за того, что у них нет доступа к GIL от процессорных потоков. Это связано со встроенным в Python механизмом, который принуждал потоки освобождать GIL после определённого интервала непрерывного использования. В случае, если никто другой не используют GIL, эти потоки могли продолжать работу.
Но тут есть одна проблема. Почти всегда GIL занимается процессорными потоками и остальные потоки не успевают занять место. Этот факт был изучен David Beazley, визуализацию этого можно увидеть здесь.
Проблема была решена в Python 3.2 в 2009 разработчиком Antoine Pitrou. Он добавил механизм подсчёта потоков, которые нуждаются в GIL. И если есть другие потоки, нуждающиеся в GIL, текущий поток не занимал бы их место.
Как найти работу начинающему специалисту?
Освоив азы языка, можно устроиться стажером в небольшую компанию и попробовать себя в области веб-разработки или машинного обучения. Как правило, стажерам очень мало платят, зато обучают и подтягивают до уровня Junior-программиста. Проработав стажером 4-6 мес., вы уже сможете претендовать на обычную зарплату для ИТ-специалиста.
Если у вас уже есть опыт работы, то добавьте свое резюме на сайты для программистов. Вас будут звать на собеседования и предлагать выполнять различные задачи. Смотрите, с чем вы не справляетесь и подтягивайте знания, затем снова идите на собеседования. Рано или поздно вас возьмут на работу. Некоторые начинающие программисты ищут первую работу по 3-4 месяца и даже больше, но затем получают необходимый опыт и процесс поиска нового работодателя идет быстрее.
Когда вы станете уверенным разработчиком, то сможете брать заказы на фрилансе и зарабатывать как частный специалист. Это даст хорошую прибавку к зарплате в офисе. Искать заказы на фрилансе можно на биржах.
Где найти Python-разработчика на проект?
- Если вам нужен специалист на удаленную работу или разовый заказ, добавьте проект на сервис www.kadrof.ru/work Это бесплатный сайт, где публикуются вакансии для фрилансеров.
- Найти частного специалиста можно в каталоге веб-разработчиков. Там есть фильтры, позволяющие выбрать программистов, знающих определенные технологии.
-
Посмотрите статью, где найти хорошего программиста. Там вы найдете много полезных сайтов, куда можно добавить вакансию для поиска Python-программиста.
Рекомендуем
Профессия актер массовых сцен (АМС)
Участие в массовке не требует актерского образования или опыта, при этом позволяет взглянуть на мир кино и ТВ изнутри. Увидеть, как снимаются …
Профессия рерайтер
Рерайтер – это одна из профессий, которую можно быстро освоить, причем самостоятельно. Суть работы – переписывать тексты своими словами, не …
Часть 4. Некоторые полезные репозитории GitHub по программированию и машинному обучению
- Курс программирования на языке Python, основа сайта introtopython.org.
- «Data science IPython notebooks» — множество качественных тетрадок по основным библиотекам Python для анализа данных — NumPy, SciPy, Pandas, Matplotlib, Scikit-learn. Краткие обзоры Apache Spark и соревнования Kaggle «Titanic: Machine Learning from Disaster».
- Гарвардский курс анализа данных
- «Interactive coding challenges» — подборка основных задач на структуры данных, графы, сортировку, рекурсию и не только. Для многих задач приведены решения и поясняющий материал с картинками.
- Репозиторий Оливье Гризеля (одного из авторов библиотеки Scikit-learn) с обучающими тетрадками IPython. Еще один.
- Тьюториал по Scikit-learn, также от авторов
- Разбор задач курса Andrew Ng «Machine learning» на языке Python
- Материалы в дополнение к книге «Mining the Social Web (2nd Edition)» (Matthew A. Russell, издательство O’Reilly Media)
- Тьюториал по использованию ансамблей для решения задач Kaggle.
- Библиотека XGBoost, которая используется большинством победителей соревнований Kaggle. Там же можно познакомиться с их историями успеха. XGBoost хорош по качеству прогнозирования, эффективно реализован, хорошо параллелится.
- Подборка данных FiveThirtyEight. Просто куча интересных наборов данных.
- Прогнозирование результатов выборов в США. Хороший пример анализа данных с Pandas
Влияние GIL на многопоточные приложения
Если смотреть на типичную программу (не обязательно написанную на Python) — есть разница, ограничена ли эта программа производительностью процессора или же I/O.
Операции, ограниченные производительностью процессора (англ. CPU-bound) — это все вычислительные операции: перемножение матриц, поиск, обработка изображений и т. д.
Операции, ограниченные производительностью I/O (англ. I/O-bound) — это те операции, которые часто находятся в ожидании чего-либо от источников ввода/вывода (пользователь, файл, БД, сеть). Такие программы и операции иногда могут ждать долгое время, пока не получат от источника то, что им нужно. Это связано с тем, что источник может проводить собственные (внутренние) операции, прежде чем он будет готов выдать результат. Например, пользователь может думать над тем, что именно ввести в поисковую строку или же какой запрос отправить в БД.
Ниже приведена простая CPU-bound программа, которая попросту ведёт обратный отсчёт:
Запустив это на 4х-ядерном компьютере получим такой результат:
Ниже приведена та же программа, с небольшим изменением. Теперь обратный отсчёт ведётся в двух параллельных потоках:
И вот результат:
Как видно из результатов, оба варианта затратили примерно одинаковое время. В многопоточной версии GIL предотвратил параллельное выполнение потоков.
GIL не сильно влияет на производительность I/O-операций в многопоточных программах, т. к. в процессе ожидания от I/O блокировка распространяется по потокам.
Однако программа, потоки которой будут работать исключительно с процессором (например обработка изображения по частям), из-за блокировки не только станет однопоточной, но и на её выполнение будет затрачиваться больше времени, чем если бы она изначально была строго однопоточной.
Такое увеличение времени — это результат появления и реализации блокировки.
Замыкание
Одно из интересных понятий функционального программирования — это замыкания
(closure). Эта идея оказалась настолько заманчивой для многих разработчиков, что была реализована даже в
некоторых нефункциональных языках программирования (Perl). Девид Мертц приводит следующее
определение замыкания: «Замыкание — это процедура вместе с привязанной к ней совокупностью данных» (в
противовес объектам в объектном программировании, как: «данные вместе с привязанным к ним совокупностью
процедур» ).
Смысл замыкания состоит в том, что определение функции «замораживает» окружающий её контекст на
момент определения. Это может делаться различными способами, например, за счёт
параметризации создания функции, как показано в листинге 5 (файл clos1.py в архиве
python_functional.tgz в разделе «Материалы для скачивания»):
Листинг 5. Создание замыкания
# -*- coding: utf-8 -*- def multiplier( n ): # multiplier возвращает функцию умножения на n def mul( k ): return n * k return mul mul3 = multiplier( 3 ) # mul3 - функция, умножающая на 3 print( mul3( 3 ), mul3( 5 ) )
Вот как срабатывает такая динамически определённая функция:
$ python clos1.py (9, 15) $ python3 clos1.py 9 15
Другой способ создания замыкания — это использование значения параметра по умолчанию в точке
определения функции, как показано в листинге 6 (файл clos3.py из архива python_functional.tgz
в разделе «Материалы для скачивания»):
Листинг 6. Другой способ создания замыкания
n = 3 def mult( k, mul = n ): return mul * k n = 7 print( mult( 3 ) ) n = 13 print( mult( 5 ) ) n = 10 mult = lambda k, mul=n: mul * k print( mult( 3 ) )
Никакие последующие присвоения значений параметру по умолчанию не приведут к изменению ранее
определённой функции, но сама функция может быть переопределена:
$ python clos3.py 9 15 30
Как стать Python-разработчиком
Python – универсальный язык программирования. Поэтому начинающему разработчику нужно выбрать, с чем он будет работать и куда развиваться.
Python-разработчик может:
- Тестировать продукты на должности QA Automation Engineer на Python.
- Работать Backend Engineer и разрабатывать программно-аппаратную часть веб-приложений.
- Стать Python Software Engineer – разрабатывать приложения и руководить проектами.
- Перейти в Data Science, быть экспертом по аналитическим данным и решать сложные технические задачи, работать с нейросетями.
«Идеальный вариант – высшее IT-образование плюс узкоспециализированный курс», – говорит Маргарита.
Среди плюсов выделяют:
- Легче найти работу в IT. Для HR-ов наличие образования – почти гарантия базовых знаний у кандидата.
- Студенты учат основы алгоритмизации и получают другие общие знания.
- В вузах часто создаются первые pet-проекты (индивидуальные или групповые проекты, в которых студент себя пробует как специалист – прим. ред.).
- Общение и работа в группах. Эти навыки будут полезны, когда студент пойдет на первую в своей жизни работу.
Минусы:
- Пять-шесть лет. Подождите, давайте прочитаем еще раз: целых пять или шесть лет обучения. Это очень много для IT.
- Обучение в вузе – не гарантия, что студент станет хорошим разработчиком в реальных проектах.
- В основном в вузе дают стандартную программу обучения. И она часто не успевает за новыми языками программирования и технологиями в IT.
- Стоимость. Обучение в КПИ им. Игоря Сикорского (НТУУ «КПИ») на дневной форме
Кроме киевского политеха в Украине еще популярны Харьковский национальный университет радиоэлектроники (ХНУРЭ) и частный университет IT Step University во Львове.
Поэтому наличие высшего IT-образования в резюме – это плюс. Но все скорее зависит от вакансии и компании. Лучше заранее определиться, в каких компаниях специалист хочет работать, просмотреть вакансии и требования на должность Python-разработчика.
Курсы – уже более узкоспециализированные знания. Можно начать с бесплатных уроков:
Но начинающему разработчику нужно понимать: курсы и опыт работы – не одно и то же.
К первому собеседованию на должность Python-разработчика, как и к любому другому, нужно подготовиться – правильно составить резюме.
Кроме стандартной информации (ФИО, контактных данных и желаемой должности) стоит указать знание технологий:
- Фреймворки (программные продукты – прим. ред.). На Python это чаще всего Django и Flask.
- Библиотеки на Python.
- Работа с базами данных.
- Работа с операционными системами.
- JS, CSS, HTML – если есть.
- Системы контроля версий.
- Методологии разработки программного обеспечения.
- Знание других языков программирования.
Поскольку опыта работы у специалиста еще нет, стоит указать ссылки на репозитории (хранилище данных – прим. ред.), pet-проекты и фриланс. Если этого достаточно, скорее всего, начинающему разработчику предложат сделать тестовое.
На самом собеседовании стоит быть готовым к тому, что HR будет задавать вопросы об обучении на курсах или в вузе, первых проектах, а еще может предложить написать кусок кода на листе бумаги. Если все окей, то начинающего специалиста возьмут на позицию Junior-разработчика или же предложат Trainee – стажировку.
Другой момент − если IT-специалист уже имеет опыт работы в сфере, но решил стать Python-разработчиком. По мнению Маргариты, предыдущий опыт работы все равно стоит указать. Потому что резюме специалиста в возрасте 30 плюс, в котором указано только образование и курсы, вызывает вопросы. Наличие хоть какого-то опыта в IT – всегда плюс.
Python-программист: кто это и чем занимается
Python-разработчик — специалист, который применяет в работе многоуровневый язык программирования Python. Язык отличается минимальным набором символов и прост для изучения и использования относительно других языков. В силу универсальности позволяет выполнять различную работу: писать плагины и скрипты, разрабатывать игры, мобильные приложения, онлайн-сервисы, сопровождать ПО.
Python-программист занимается следующим:
- Создаёт вычислительные программы;
- Работает с сетевыми протоколами HTTP и HTTPS;
- Пишет программное обеспечение (парсер) для сбора и структурирования данных;
- Пишет новые парсеры для сбора данных с сайтов;
- Администрирует работу парсеров;
- Правит написанные ранее парсеры при изменении данных;
- Настраивает отдачу данных в модуль машинного обучения;
- Создаёт многопоточные приложения;
- Использует систему контроля версий.
Python — универсальный язык программирования, но наиболее применим в следующих направлениях:
- Веб-разработка. Наиболее популярные web-фреймворки – Django и Flask. Это инструменты облегчающие написание и запуск веб-приложений. Они многое умеют из коробки: есть готовая админ панель, которая играет роль CMS, готовые модули аутентификации и авторизации, упрощенные методы работы с базами данных (ORM), работа с XML и многое другое. Django признан веб-разработчиками как один из наиболее удобных и быстрых способов реализовать идею в жизнь.
- Математические вычисления (анализ и визуализация данных). В Python есть множество библиотек для работы с вычислениями разного характера. Например, matplotlib и seaborn для визуализации данных, NumPy для линейной алгебры, SciPy для научных вычислений. При помощи Python можно в несколько строк кода написать самообучающийся искусственный интеллект или посчитать огромную матрицу. . Код на питоне легко преобразуется в более быстрый C++ , что делает использование языка невероятно удобным, простым и универсальным.
- Машинное обучение (Machine Learning). Набор алгоритмов, которые позволяют определять закономерности. Специалист загружает массив данных — начальные и конечные, затем эти данные проходят через матрицу. С помощью информации о конечных данных получается желаемый результат. Системы могут учиться искать закономерности и принимать решения практически без участия человека.
- Глубокое обучение (Deep Learning). Система методик, которые основываются на обучении представлениям под определённые задачи, а не алгоритмам. Такая сеть представляет собой нейронные связи, аналогичные связям в человеческом мозге. Машинное и глубокое обучение позволяет практически автоматизировать и упростить процесс обработки данных.
- Программное обеспечение. Python отличается простотой и в то же время высокой производительностью, что отлично подходит для работы с программным обеспечением. Кросс-платформенная графическая библиотека tkinter, входящая в стандартную библиотеку Python позволяет реализовать программу под любую операционную систему.
- Автоматизация и написание скриптов. Пишется скрипт, который автоматизирует работу. Используется в случае когда нужно сымитировать поведение приложения в среде окружения. Чтобы не писать одинаковое количество программ, создается один сценарий и с помощью процесса автоматизации прорабатывается..
- Администрирование ОС и локальных сетей. Использование Python совместно с Bash значительно упрощает работу системным администраторам.
Подписывайтесь на наши новости
Одно письмо в неделю с самыми актуальными статьями + обзор digital-профессий!
*Нажимая «Подписаться» вы даете согласие на обработку персональных данных.
Что такое питон простыми словами
Для того чтобы понять, что такое Python нужно разобраться зачем вообще нужны языки программирования. Они нужны для взаимодействия человека и компьютера. Между собой люди общаются на естественном языке.
Язык программирования Python
Питон является относительно простым высокоуровневым скриптовым языком, который служит для создания различных сценариев. Это означает, что для программирования на Python, не требуется знания машинных кодов – команд для компьютера.
Программирование при помощи машинных кодов ускоряет программу, но очень трудоемко и требует хорошего знания архитектуры компьютера. Одним из таких низкоуровневых языков является ассемблер. Чаще всего низкоуровневое программирование используется в промышленности для специализированных контроллеров, где нет большого объема памяти.
Python может использоваться для программирования контроллеров в станках ЧПУ и в робототехнике. Популярный во всем мире одноплатный микрокомпьютер Raspberry Pi также программируется на питоне. С помощью «малинки» можно программировать роботов, умные дома, квадрокоптеры и множество других вещей. Pi в названии миникомпьютера обозначает, что программирование происходит на Python.
Одноплатный микрокомпьютер Raspberry Pi
На языке высокого уровня нужно уметь программировать при помощи понятий, обозначаемых словами. Чаще всего это английский язык, но есть и примеры кодирования на других языках. Например, программу «Бухгалтерия 1С» можно редактировать и изменять на русском.
Питон поддерживает объектно-ориентированное программирование и является интерпретируемым языком. Это означает, что программа выполняется построчно и для ее выполнения на компьютере должен быть установлен интерпретатор. Самым распространенным и популярным интерпретатором является CPython.
Пишем программу 3D-моделирования в 500 строках кода
Перевод
Введение
Люди от природы креативны. Мы постоянно проектируем и создаём новые, полезные и интересные вещи. Сегодня мы пишем ПО, помогающее процессу проектирования и творчества. Программы САПР (Computer-aided design, CAD) позволяют творцам проектировать здания, мосты, графику видеоигр, чудовищ для фильмов, объектов для 3D-печати и множество других вещей перед созданием физической версии проекта.
По своей сути, инструменты CAD являются способом абстрагирования трёхмерного проекта в нечто, что можно просматривать и редактировать на двухмерном экране. Чтобы справляться со своей задачей, инструменты CAD должны обеспечивать три основных элемента функциональности. Во-первых, они должны иметь структуру данных, описывающую проектируемый объект: это то, как компьютер понимает создаваемый пользователем трёхмерный мир. Во-вторых, инструмент CAD должен обеспечивать отображение проекта на экране пользователя. Пользователь проектирует физический объект с тремя измерениями, но экран компьютера имеет всего два измерения. Инструмент CAD должен моделировать способ восприятия нами объектов и отрисовывать их на экране так, чтобы пользователь смог понять все три измерения объекта. В-третьих, CAD должен предоставлять возможность взаимодействия с проектируемым объектом. Пользователь должен быть способен дополнять или модифицировать проект, чтобы создать нужный результат. Кроме того, все инструменты должны иметь возможность сохранения и загрузки проектов с диска, чтобы пользователи могли сотрудничать, обмениваться своей работой и сохранять её.
Где используется язык Python?
Мировой размах применения обусловлен не только синтаксисом и мощью, но и философией языка. Принципы Python доступны каждому – достаточно ввести в любом интерпретаторе код и узнать основные положения, которые лежат в основе «Питона».
Возможности Python опробованы десятками организаций.
Python используют в крупные мировые бренды
Мощь и гибкость языка находит применение у следующих мировых брендов:
- – скраппинг поиска и улучшение работы YouTube;
- Netflix – анализ данных на серверной стороне, аллертинг;
- BitTorrent – реализация сетей peer-to-peer;
- Pixar, Industrial Light & Magic, Disney – анимационные фильмы;
- Intel, Cisco, IBM – тестирование;
- JPMorgan, UBS, Citadel – прогнозирование финансовых рынков;
- iRobot – создание роботизированных устройств.
Как видно, возможности Python используются в решении разносторонних задач. Рядовые пользователи Всемирной сети обожают YouTube, который частично написан на языке Python, в то время как гиганты информационных технологий Intel или IBM активно используют «змею» для тестирования и исследований.
Помимо указанных организаций, алгоритмы Python также используются в следующих брендах:
Возможности Python активно внедряются и в отечественны проекты. Mail.ru и Яндекс используют алгоритмы, которые написаны на данном языке программирования.
Перечисленные бренды – лишь вершина айсберга. Достаточно сказать, что Python – это основной инструмент для исследовательских работ в NASA. Для инновационных космических проектов требовался практичный и простой язык программирования с большим функционалом, и «Питон» стал любимцем специалистов.
Функции в Python
Функции в Python определяются 2-мя способами: через определение
или через анонимное описание . Оба этих способа
определения доступны, в той или иной степени, и в некоторых других языках программирования. Особенностью
Python является то, что функция является таким же именованным объектом, как и любой другой объект некоторого
типа данных, скажем, как целочисленная переменная. В листинге 1 представлен простейший пример (файл
func.py из архива python_functional.tgz в разделе «Материалы для скачивания»):
Листинг 1. Определения функций
#!/usr/bin/python # -*- coding: utf-8 -*- import sys def show( fun, arg ): print( '{} : {}'.format( type( fun ), fun ) ) print( 'arg={} => fun( arg )={}'.format( arg, fun( arg ) ) ) if len( sys.argv ) > 1: n = float( sys.argv ) else: n = float( input( "число?: " ) ) def pow3( n ): # 1-е определение функции return n * n * n show( pow3, n ) pow3 = lambda n: n * n * n # 2-е определение функции с тем же именем show( pow3, n ) show( ( lambda n: n * n * n ), n ) # 3-е, использование анонимного описание функции
При вызове всех трёх объектов-функций мы получим один и тот же результат:
$ python func.py 1.3 <type 'function'> : <function pow3 at 0xb7662844> arg=1.3 => fun( arg )=2.197 <type 'function'> : <function <lambda> at 0xb7662bc4> arg=1.3 => fun( arg )=2.197 <type 'function'> : <function <lambda> at 0xb7662844> arg=1.3 => fun( arg )=2.197
Ещё более отчётливо это проявляется в Python версии 3, в которой всё является классами (в том числе, и
целочисленная переменная), а функции являются объектами программы, принадлежащими к классу
:
$ python3 func.py 1.3 <class 'function'> : <function pow3 at 0xb74542ac> arg=1.3 => fun( arg )=2.1970000000000005 <class 'function'> : <function <lambda> at 0xb745432c> arg=1.3 => fun( arg )=2.1970000000000005 <class 'function'> : <function <lambda> at 0xb74542ec> arg=1.3 => fun( arg )=2.1970000000000005
Примечание. Существуют ещё 2 типа объектов, допускающих функциональный вызов —
функциональный метод класса и функтор, о которых мы поговорим позже.
Если функциональные объекты Python являются такими же объектами, как и другие объекты данных, значит,
с ними можно и делать всё то, что можно делать с любыми данными:
- динамически изменять в ходе выполнения;
- встраивать в более сложные структуры данных (коллекции);
- передавать в качестве параметров и возвращаемых значений и т.д.
На этом (манипуляции с функциональными объектами как с объектами данных) и базируется функциональное
программирование. Python, конечно, не является настоящим языком функционального программирования, так,
для полностью функционального программирования существуют специальные языки: Lisp, Planner, а из более
свежих: Scala, Haskell. Ocaml, … Но в Python можно «встраивать» приёмы функционального программирования в
общий поток императивного (командного) кода, например, использовать методы, заимствованные из
полноценных функциональных языков. Т.е. «сворачивать» отдельные фрагменты императивного кода (иногда
достаточно большого объёма) в функциональные выражения.
Временами спрашивают: «В чём преимущества функционального стиля написания отдельных фрагментов
для программиста?». Основным преимуществом функционального программирования является то, что после
однократной отладки такого фрагмента в нём при последующем многократном использовании не возникнут
ошибки за счёт побочных эффектов, связанных с присвоениями и конфликтом имён.
Достаточно часто при программировании на Python используют типичные конструкции из области
функционального программирования, например:
print ( )
В результате запуска получаем:
$ python funcp.py
Профессиональные навыки
Существует много языков для образовательных целей, например, Scratch или LOGO. С их помощью можно понять логику программирования, поэтому некоторые из них применяют в школах, и это хорошо. Хотя как бы вы в них не продвинулись, никто их серьезно не воспринимает (конечно, кроме учителей, которые преподают их ученикам).
Лучше займитесь Python. Он доступен, но сразу погружает вас в мир настоящего программирования.
Интеграция Python с другими языками? Нет проблем. Дополнительные решения? Да, имеется много вариантов. Jython – это Java с включенным Python, IronPython – это .NET c включенным Python.