Python vs PHP или Python глазами PHP программиста
В последнее время начать немного изучать Python. Это на сегодня очень популярный язык программирования, входит в тройку наиболее популярных языков и по количеству вопросов на разных сайтах типа стековерфолоу и по коллчичеству репозиториев на гитхабе.
Или вот сравнение по гугл трендах
https://trends.google.com/trends/explore?date=today%205-y&geo=UA&q=%2Fm%...
Или вот информация с сайта TIOBE, они для анализа используют очень много параметоров:
https://www.tiobe.com/tiobe-index/
Согласно их данным Python сейчас занимает первую позицию в рейтинге, обограм даже C++, C, C# и Java, а PHP занимает 8 позицию (год назад была 9-тая, то есть за год немного даже подрос). За последние 15 лет Python взлетел из 7 позиции на 1-вую, а PHP медленно опустился с 5-той на 8-9. Вся информация по ссылке выше.
Для чего используют Python:
- для учебы. Если раньте школьников и студентов учили на паскале и бейсике которые вообще нигде не используются, то сейчас все дружно перешли на Python и это правильно, язык простой, жиой, очень активно развивается и также активно используется. Наверное из-за этого и такой бурный рост языка, так как вчерашние студенты, которые выучили основы языка во время учебы потом начинают его использовать и в работе.
- для различной автоматизации рабочих процессов. Например спарсить какой-то сайт, обработать пачку ексель документов, дернуть какую-то апишку и тысячи других не очень больших задач. На Python есть тысячи готовых библиотек с помощь которых можно делать что угодно от парсинга всего что только можно спарсить до распознавания лиц, синтеза речи и машинного обучения.
- для робототехники. Например можно взять какой-нибудь конструктор лего программируемый или плату типа Arduino, подключаем к ней какие-то датчики, моторчики, камеры итд. пишем на Python программу управления и вуаля получаем какую-то машинку на радиоуправлении, или квадрокоптер или сигнализацию для дома или кучу других интересных вещей, как я жалею что в годы моего детства такого не было))
- для обработки больших данных, дата саенс, машинного обучения, нейронных сетей итд. И тут Python вообще первый среди всех языков программирования, в нем есть огромное к-во библиотек для всего этого. Эти библиотеки часто используют часть кода на C++ для ресурсоемких задач. Часть аналогов есть на node.js, а на PHP практически ничего нету.
- для веба и создание API серверов. Есть там фреймворк Django, наверное самый популярный, и на нем много чего делают. Его плюс в том что к нему есть очень много модулей, но сам по себе он гм.. я немного посмотрел его возможности и это мне напомнило PHP фреймворки и микрофреймворки лет так 10-15 назад.. ну то есть все очень бедно по функционалу, если сравнить его с напр. ларавел то это просто небо и земля :) Короче, мне сложно представить как на Python можно сделать что-то реально большое, скорее какие-то простые, небольшие сайты.
Есть фреймворк FastAPI очень популярный в последнее время, на нем делают разные api сервисы. - консольные программы
- игры, точнее больше или какие-то несложные 2D игры или какие-то части для больших игр по например обработке данных
- десктопные приложения
- программы для мобильных устройств.. но последние 2 пункта это как по мне скорее исключение, примерно как натягивание совы на глобус :) так как для это есть специальные инструменты.
- его также майкрософт уже добавил в свой Excel, есго также добавляют в браузер.. короче, скоро наверное вообще не останется ни одной области, где бы небило Python-а))
Плюсы Python
- простота изучения, отлично подходит в качестве первого языка программирования, мне он очень напоминает как в студенческие годы изучал паскаль))
- огромное к-во библиотек на все случаи жизни
- огромное сообщество
- очень активно развивается
- в среде машинного обучения ему практически нету альтернативы
- много вакансий
Минусы Python
- скорость, он как и все скриптовые языки достаточно медленный, причем тот же PHP последних версий 7,8 значительно обгоняет Python по скорости. Хотя, для тех задач для которых его используют скорости там вполне себе хватает.
- отсутствие хорошего ООП, тут нету ни нормальных приватных классов и методов, особенно протектед, здесь вообще нету интерфейсов, абстрактные классы реализованы как какой-то костыль через сторонний модуль итд. PHP версии 4! если не ошибаюсь был более функциональным в этом плане.
- рядом с очень классными библиотеками, написанными хорошими программистами, есть также множество говнокода и очень слабых программистов, так как пишут на Python вообще все кому не лень))
Немного сравнения синтаксиса Python и PHP
расширение файлов *.py
не нужно открывать никаких тегов тира <?php в PHP, открыли файл и пишете код
каждый файл это модуль, можно подгрузить, импортировать не весь файл, а только какую-то его функцию или класс, напр
import random
или
from random import randint
нету $ для переменных, ; в конце каждой строки и {} для классов, функций, условий, циклов.. () для условий и циклов также не пишутся, вместо этого есть отступы!
не всем это нравится, но зато код стает очень понятным и написать код неправильно его отформатировав просто невозможно.
def my_func(x): #comment return x*x
это функция, вместо function - def
функция может возвращать не одно значение а несколько, например
return x,x*2,x*3
и потом делаем
x,y,z = my_func(x)
нету оператора ++ вместо него просто пишут
x +=1
Нету тернарного оператора
$x = true ? 1 : 0;
вместо этого дают так:
x = 1 if True else 0
вроде логически даже более правильно - 1 если истина иначе 0, но не привычно)
True и False с большой буквы
вместо NULL - None
В классах уже писал нету нормальных private, protected, interface, трейтов итд. А то, что есть скорее костыли какие-то. То есть по сути нету нормальной инкапсуляции. Скорее есть набор правил, которым должны следовать программисты, но при желании это все обходится и можно легко получить доступ к приватным переменным. Фанаты языка в один голос повторяют что Python это самый лучший язык, а раз там этого нету, значит там это и не нужно. До недавнего времени они тоже самое говорили и о динамической типизации, а потом (вроде с версии 3.6) в язык завезли типизацию (правда использовать ее не обязательно). Кстати, тоже самое буквально слово в слово можно услышать и от фанатов опенкарта)) опенкарт - самый лучший, а раз там этого нету, значит оно тут и не надо)) Категорически с этим не согласен, так как наличие какого-то функционала не заставляет им пользоваться, но дает выбор, а отсутствие практически лишает вообще какого-либо выбора.
Но в тоже время классы в пайтоне имеют одну очень интересную особенность - там есть тьма магических методов (которые начинаются и заканчиваются на __), которые позволяют выполнять с этим классом почти все (или вообще все) возможные операции, разные +, -, сложение, деление, возведение в степень, сравнение, преобразование в число, строку, массив итд.
например создаете метод класса
__add__()
со своей логикой и можно делать
object3 = object1+object2
Классы также поддерживают множественное наследование, чего не поддерживает PHP, но PHP поддерживает множественную имплементацию интерфейсов и трейтов, чего нету в пайтоне.
В Python метод конструктора и деструктора это __init__ и __del__ соответственно
Наоборот:
В Python self указывает на объект класса (аналог $this в PHP), а в PHP на сам класс (для обращения к переменным класса и методам класса)
В Python есть понятие статического метода класса и метода класса. Первое это просто функция которая не имеет доступа к переменным класса, а второе - имеет, как раз второй вариант работает как статический метод в PHP.
Вместо одного массива array или [] как в PHP
есть аж 4 вида типа массивов:
list или список, обычный одномерные массив
[1,2,"foo","bar"]
tuple (кортеж) - очень похож на список, только его нельзя изменять. Через него сделаны возвраты нескольких значений из функции. Через него также можно легко поменять значения переменных местами, например
x,y=y,x
и все) теперь в переменной x значение из y и наоборот.
(1,2,"foo","bar")
set набор - имеет все элементы уникальные
{1,2,"foo","bar"}
dictionary - словарь, аналог ассотиативного массива в PHP
{1: 2, "foo": "bar"}
есть срезы, очень удобная штука, например получить элементы массива с 1 по 3
new_list = old_list[1:3]
или перевернет все элементы, кто был первым станет последним итд.
seq[::-1]
тоже самое со строками, так как строка работает как список, можно делать срезы, использовать циклы перебора символов итд.
string = 'строка' string[1:3] # 'тр'
или вот такая магия используется очень часто:
squares = [i * i for i in range(10)] print(squares) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
То есть в одну строку кода можно создать список, набор, словать
И достаточно много подобное магии
Если вкратце по синтаксису - все, если где ошибся то поправьте кто более знаком с этим языком или добавьте если есть что, так как я только начинаю его учить, вполне возможно что-то и упустил.
Нужно ли учить этот язык? Мне кажется - однозначно - да.
- он простой, выучить его можно достаточно быстро, тем более что по пайтону есть просто куча бесплатных курсов, видео на ютубе итд.
- на нем интересно писать код, просто открываешь редактор и пишешь))
- он очень популярный и есть много вакансий
- тут огромное сообщество и тьма библиотек на все случаи жизни, это открывает большие возможности
- можно работать в области машинного обучение и нейронных сетей, а сейчас это вообще очень популярная область и Python тут похоже вне конкуренции, он завоевал тут почти все))
- очень полезно для общего развития
- очень полезно для резюме, даже если вы программист PHP то иметь в резюме Python как второй язык будет огромным плюсом для вас как для специалиста
- мне кажется, что очень хорошо подойдет для разработчиков OpenCart, тут нету сложных конструкций как в ларавел, тут простой код и синтаксис, ну почти как в самом опенкарте :)
Фото взято с сайта https://hackr.io/