Python vs PHP или Python глазами PHP программиста
Sorry for my English! English is not my native language. One of the reasons to create this blog is to improve my English writing. So I will be highly obliged if you will help me with this. If you find a grammar error on this page, please select it with your mouse and press Ctrl+Enter.
В последнее время начать немного изучать 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/
Add new comment