Программист питон – Обучение на Python Developer: программист питон — обучение на разработчика Python | GeekBrains — образовательный портал | GeekBrains

Содержание

Основы языка программирования Python за 10 минут / Habr

На сайте Poromenos' Stuff была
опубликована статья, в которой, в сжатой форме,
рассказывают об основах языка Python. Я предлагаю вам перевод этой статьи. Перевод не дословный. Я постарался подробнее объяснить некоторые моменты, которые могут быть непонятны.

Если вы собрались изучать язык Python, но не можете найти подходящего руководства, то эта
статья вам очень пригодится! За короткое время, вы сможете познакомиться с
основами языка Python. Хотя эта статья часто опирается
на то, что вы уже имеете опыт программирования, но, я надеюсь, даже новичкам
этот материал будет полезен. Внимательно прочитайте каждый параграф. В связи с
сжатостью материала, некоторые темы рассмотрены поверхностно, но содержат весь
необходимый метриал.



Основные свойства

Python не требует явного объявления переменных, является регистро-зависим (переменная var не эквивалентна переменной Var или VAR — это три разные переменные) объектно-ориентированным языком.

Синтаксис

Во первых стоит отметить интересную особенность Python. Он не содержит операторных скобок (begin..end в pascal или {..}в Си), вместо этого

блоки выделяются отступами: пробелами или табуляцией, а вход в блок из операторов осуществляется двоеточием. Однострочные комментарии начинаются со знака фунта «#», многострочные — начинаются и заканчиваются тремя двойными кавычками «"""».
Чтобы присвоить значение пременной используется знак «=», а для сравнения —
«==». Для увеличения значения переменной, или добавления к строке используется оператор «+=», а для уменьшения — «-=». Все эти операции могут взаимодействовать с большинством типов, в том числе со строками. Например


>>> myvar = 3
>>> myvar += 2
>>> myvar -= 1
""«Это многострочный комментарий
Строки заключенные в три двойные кавычки игнорируются»""
>>> mystring = «Hello»
>>> mystring += " world."
>>> print mystring
Hello world.
# Следующая строка меняет
значения переменных местами. (Всего одна строка!)
>>> myvar, mystring = mystring, myvar

Структуры данных

Python содержит такие структуры данных как списки (lists), кортежи (tuples) и словари (dictionaries). Списки — похожи на одномерные массивы (но вы можете использовать Список включающий списки — многомерный массив), кортежи — неизменяемые списки, словари — тоже списки, но индексы могут быть любого типа, а не только числовыми. "Массивы" в Python могут содержать данные любого типа, то есть в одном массиве может могут находиться числовые, строковые и другие типы данных. Массивы начинаются с индекса 0, а последний элемент можно получить по индексу -1 Вы можете присваивать переменным функции и использовать их соответственно.


>>> sample = [1, [«another», «list»], («a», «tuple»)] #Список состоит из целого числа, другого списка и кортежа
>>> mylist = [«List item 1», 2, 3.14] #Этот список содержит строку, целое и дробное число
>>> mylist[0] = «List item 1 again» #Изменяем первый (нулевой) элемент листа mylist
>>> mylist[-1] = 3.14 #Изменяем последний элемент листа
>>> mydict = {«Key 1»: «Value 1», 2: 3, «pi»: 3.14} #Создаем словарь, с числовыми и целочисленным индексами
>>> mydict[«pi»] = 3.15 #Изменяем элемент словаря под индексом «pi».
>>> mytuple = (1, 2, 3) #Задаем кортеж
>>> myfunction = len #Python позволяет таким образом объявлять синонимы функции
>>> print myfunction(list)
3

Вы можете использовать часть массива, задавая первый и последний индекс через двоеточие «:». В таком случае вы получите часть массива, от первого индекса до второго не включительно. Если не указан первый элемент, то отсчет начинается с начала массива, а если не указан последний — то масив считывается до последнего элемента. Отрицательные значения определяют положение элемента с конца. Например:


>>> mylist = [«List item 1», 2, 3.14]
>>> print mylist[:] #Считываются все элементы массива
['List item 1', 2, 3.1400000000000001]
>>> print mylist[0:2] #Считываются нулевой и первый элемент массива.
['List item 1', 2]
>>> print mylist[-3:-1] #Считываются элементы от нулевого (-3) до второго (-1) (не включительно)
['List item 1', 2]
>>> print mylist[1:] #Считываются элементы от первого, до последнего
[2, 3.14]

Строки

Строки в Python обособляются кавычками двойными «"» или одинарными «'». Внутри двойных ковычек могут присутствовать одинарные или наоборот. К примеру строка «Он сказал 'привет'!» будет выведена на экран как «Он сказал 'привет'!». Если нужно использовать строку из несколько строчек, то эту строку надо начинать и заканчивать тремя двойными кавычками «"""». Вы можете подставить в шаблон строки элементы из кортежа или словаря. Знак процента «%» между строкой и кортежем, заменяет в строке символы «%s» на элемент кортежа. Словари позволяют вставлять в строку элемент под заданным индексом. Для этого надо использовать в строке конструкцию «%(индекс)s». В этом случае вместо «%(индекс)s» будет подставлено значение словаря под заданным индексом.


>>>print «Name: %s\nNumber: %s\nString: %s» % (myclass.name, 3, 3 * "-")
Name: Poromenos
Number: 3
String: —  
strString = ""«Этот текст расположен
на нескольких строках»""
 
>>> print «This %(verb)s a %(noun)s.» % {«noun»: «test», «verb»: «is»}
This is a test.

Операторы

Операторы while, if, for составляют операторы перемещения. Здесь нет аналога оператора select, так что придется обходиться if. В операторе for происходит сравнение переменной и списка. Чтобы получить список цифр до числа <number> — используйте функцию range(<number>). Вот пример использования операторов


rangelist = range(10) #Получаем список из десяти цифр (от 0 до 9)
>>> print rangelist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in rangelist: #Пока переменная number (которая каждый раз увеличивается на единицу) входит в список…
# Проверяем входит ли переменная
# numbers в кортеж чисел (3, 4, 7, 9)
if number in (3, 4, 7, 9): #Если переменная number входит в кортеж (3, 4, 7, 9)...
# Операция «break» обеспечивает
# выход из цикла в любой момент
break
else:
# «continue» осуществляет «прокрутку»
# цикла. Здесь это не требуется, так как после этой операции
# в любом случае программа переходит опять к обработке цикла
continue
else:
# «else» указывать необязательно. Условие выполняется
# если цикл не был прерван при помощи «break».
pass # Ничего не делать
 
if rangelist[1] == 2:
print «The second item (lists are 0-based) is 2»
elif rangelist[1] == 3:
print «The second item (lists are 0-based) is 3»
else:
print «Dunno»
 
while rangelist[1] == 1:
pass

Функции

Для объявления функции служит ключевое слово «def». Аргументы функции задаются в скобках после названия функции. Можно задавать необязательные аргументы, присваивая им значение по умолчанию. Функции могут возвращать кортежи, в таком случае надо писать возвращаемые значения через запятую. Ключевое слово «lambda» служит для объявления элементарных функций .


# arg2 и arg3 — необязательые аргументы, принимают значение объявленное по умолчни,
# если не задать им другое значение при вызове функци.
def myfunction(arg1, arg2 = 100, arg3 = «test»):
return arg3, arg2, arg1
#Функция вызывается со значением первого аргумента — "Argument 1", второго — по умолчанию, и третьего — "Named argument".
>>>ret1, ret2, ret3 = myfunction(«Argument 1», arg3 = «Named argument»)
# ret1, ret2 и ret3 принимают значения "Named argument", 100, "Argument 1" соответственно
>>> print ret1, ret2, ret3
Named argument 100 Argument 1
 
# Следующая запись эквивалентна def f(x): return x + 1
functionvar = lambda x: x + 1
>>> print functionvar(1)
2

Классы

Язык Python ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания «__» (например «__myprivatevar»). Мы можем также присвоить значение переменной класса извне. Пример:


class Myclass:
common = 10
def __init__(self):
self.myvariable = 3
def myfunction(self, arg1, arg2):
return self.myvariable
 
# Здесь мы объявили класс Myclass. Функция __init__ вызывается автоматически при инициализации классов.
>>> classinstance = Myclass() # Мы инициализировали класс и переменная myvariable приобрела значение 3 как заявлено в методе инициализации
>>> classinstance.myfunction(1, 2) #Метод myfunction класса Myclass возвращает значение переменной myvariable
3
# Переменная common объявлена во всех классах
>>> classinstance2 = Myclass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Поэтому, если мы изменим ее значение в классе Myclass изменятся
# и ее значения в объектах, инициализированных классом Myclass
>>> Myclass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# А здесь мы не изменяем переменную класса. Вместо этого
# мы объявляем оную в объекте и присваиваем ей новое значение
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> Myclass.common = 50
# Теперь изменение переменной класса не коснется
# переменных объектов этого класса
>>> classinstance.common
10
>>> classinstance2.common
50
 
# Следующий класс является наследником класса Myclass
# наследуя его свойства и методы, ктому же класс может
# наследоваться из нескольких классов, в этом случае запись
# такая: class Otherclass(Myclass1, Myclass2, MyclassN)
class Otherclass(Myclass):
def __init__(self, arg1):
self.myvariable = 3
print arg1
 
>>> classinstance = Otherclass(«hello»)
hello
>>> classinstance.myfunction(1, 2)
3
# Этот класс не имеет совйтсва test, но мы можем
# объявить такую переменную для объекта. Причем
# tэта переменная будет членом только classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10

Исключения

Исключения в Python имеют структуру try-except [exceptionname]:


def somefunction():
try:
# Деление на ноль вызывает ошибку
10 / 0
except ZeroDivisionError:
# Но программа не "Выполняет недопустимую операцию"
# А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»
print «Oops, invalid.»
 
>>> fnexcept()
Oops, invalid.

Импорт

Внешние библиотеки можно подключить процедурой «import [libname]», где [libname] — название подключаемой библиотеки. Вы так же можете использовать команду «from [libname] import [funcname]», чтобы вы могли использовать функцию [funcname] из библиотеки [libname]


import random #Импортируем библиотеку «random»
from time import clock #И заодно функцию «clock» из библиотеки «time»
 
randomint = random.randint(1, 100)
>>> print randomint
64

Работа с файловой системой

Python имеет много встроенных библиотек. В этом примере мы попробуем сохранить в бинарном файле структуру списка, прочитать ее и сохраним строку в текстовом файле. Для преобразования структуры данных мы будем использовать стандартную библиотеку «pickle»


import pickle
mylist = [«This», «is», 4, 13327]
# Откроем файл C:\binary.dat для записи. Символ «r»
# предотвращает замену специальных сиволов (таких как \n, \t, \b и др.).
myfile = file(r«C:\binary.dat», «w»)
pickle.dump(mylist, myfile)
myfile.close()
 
myfile = file(r«C:\text.txt», «w»)
myfile.write(«This is a sample string»)
myfile.close()
 
myfile = file(r«C:\text.txt»)
>>> print myfile.read()
'This is a sample string'
myfile.close()
 
# Открываем файл для чтения
myfile = file(r«C:\binary.dat»)
loadedlist = pickle.load(myfile)
myfile.close()
>>> print loadedlist
['This', 'is', 4, 13327]

Особенности

  • Условия могут комбинироваться. 1 < a < 3 выполняется тогда, когда а больше 1, но меньше 3.
  • Используйте операцию «del» чтобы очищать переменные или элементы массива.
  • Python предлагает большие возможности для работы со списками. Вы можете использовать операторы объявлении структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if — позволяет выбирать элементы по условию.

>>> lst1 = [1, 2, 3]
>>> lst2 = [3, 4, 5]
>>> print [x * y for x in lst1 for y in lst2]
[3, 4, 5, 6, 8, 10, 9, 12, 15]
>>> print [x for x in lst1 if 4 > x > 1]
[2, 3]
# Оператор «any» возвращает true, если хотя
# бы одно из условий, входящих в него, выполняется.
>>> any(i % 3 for i in [3, 3, 4, 4, 3])
True
# Следующая процедура подсчитывает количество
# подходящих элементов в списке
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 3)
3
>>> del lst1[0]
>>> print lst1
[2, 3]
>>> del lst1

  • Глобальные переменные объявляются вне функций и могут быть прочитанны без каких либо объявлений. Но если вам необходимо изменить значение глобальной переменной из функции, то вам необходимо объявить ее в начале функции ключевым словом «global», если вы этого не сделаете, то Python объявит переменную, доступную только для этой функции.

number = 5
 
def myfunc():
# Выводит 5
print number
 
def anotherfunc():
# Это вызывает исключение, поскольку глобальная апеременная
# не была вызванна из функции. Python в этом случае создает
# одноименную переменную внутри этой функции и доступную
# только для операторов этой функции.
print number
number = 3
 
def yetanotherfunc():
global number
# И только из этой функции значение переменной изменяется.
number = 3

Эпилог

Разумеется в этой статье не описываются все возможности Python. Я надеюсь что эта статья поможет вам, если вы захотите и в дальнейшем изучать этот язык программирования.

Преимущества Python

  • Скорость выполнения программ написанных на Python очень высока. Это связанно с тем, что основные библиотеки Python
    написаны на C++ и выполнение задач занимает меньше времени, чем на других языках высокого уровня.
  • В связи с этим вы можете писать свои собственные модули для Python на C или C++
  • В стандартныx библиотеках Python вы можете найти средства для работы с электронной почтой, протоколами
    Интернета, FTP, HTTP, базами данных, и пр.
  • Скрипты, написанные при помощи Python выполняются на большинстве современных ОС. Такая переносимость обеспечивает Python применение в самых различных областях.
  • Python подходит для любых решений в области программирования, будь то офисные программы, вэб-приложения, GUI-приложения и т.д.
  • Над разработкой Python трудились тысячи энтузиастов со всего мира. Поддержкой современных технологий в стандартных библиотеках мы можем быть обязаны именно тому, что Python был открыт для всех желающих.

Учим Python качественно / Habr

Здравствуйте всем!

Решил поделиться методом обучения сего мощного, но в одно и тоже время лёгкого языка программирования. Он действительно лёгкий. Вам не надо будет запоминать и вводить лишних символов, которые Вы можете встретить в Си-подобных языках.

Удобочитаемый синтаксис, прост в обучении, высокоуровневый язык, Объектно-Ориентированый язык программирования (ООП), мощный, интерактивный режим, масса библиотек. Множество иных плюсов… И это всё в одном языке.
Для начала окунёмся в возможности и узнаем, что же умеет Python?

А зачем мне твой Python?

Много начинающих программистов задают подобные вопросы. Это как с покупкой телефона, скажите, почему я должен купить этот телефон, а не этот?
Качество программного обеспечения

Для многих, в том числе и для меня, основные преимущества — это удобочитаемый синтаксис. Не много языков могут похвастаться им. Программный код на Python читается легче, что значит, многократное его использование и обслуживание выполняется гораздо проще, чем использование программного кода на других языках сценариев. Python содержит самые современные механизмы многократного использования программного кода, каким является ООП.
Библиотеки поддержки

В составе Python поставляется большое число собранных и переносимых функциональных возможностей, известных как стандартная библиотека. Эта библиотека предоставляет Вам массу возможностей, востребованных в прикладных программах, начиная от поиска текста по шаблону и заканчивая сетевыми функциями. Python допускает расширение как за счёт ваших собственных библиотек, так и за счёт библиотек, созданных другими разработчиками.
Переносимость программ

Большая часть программ на языке Python выполняется без изменений на всех основных платформах. Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую. Также Python предоставляет Вам массу возможностей по созданию переносимых графических интерфейсов .
Скорость разработки

По сравнению с компилирующим, или строго типизированными языками, такими как С, С++ или Java, Python во много раз повышает производительность труда разработчика. Объем программного кода на языке Python обычно составляет треть, или даже пятую часть эквивалентного программного кода на языке С++ или Java, что означает меньший объем ввода с клавиатуры, меньшее количество времени на откладку и меньший объем трудозатрат на сопровождение. Кроме того, программы на языке Python запускаются сразу же, минуя длительные этапы компиляции и связывания, необходимые в некоторых других языках программирования, что еще больше увеличивает производительность труда программиста.
Где используется Python?

  • Компания Google использует Python в своей поисковой системе и оплачивает труд создателя Python — Гвидо ван Россума
  • Такие компании, как Intel, Cisco, Hewlett-Packard, Seagate, Qualcomm и IBM, используют Python для тестирования аппаратного обеспечения
  • Служба коллективного использования видеоматериалов YouTube в значительной степени реализована на Python
  • NSA использует Python для шифрования и анализа разведданных
  • Компании JPMorgan Chase, UBS, Getco и Citadel применяют Python для прогнозирования финансового рынка
  • Популярная программа BitTorrent для обмена файлами в пиринговых сетях написана на языке Python
  • Популярный веб-фреймворк App Engine от компании Google использует Python в качестве прикладного языка программирования
  • NASA, Los Alamos, JPL и Fermilab используют Python для научных вычислений.

и другие компании также используют этот язык.

Python является языком сценариев.

Литература

Вот мы и познакомились поближе с языком программирования Python. Можно сказать отдельно, что плюсы Python состоят еще в том, что у него есть масса качественной литературы. Не каждый язык этим может похвастаться. К примеру язык программирования JavaScript не может порадовать пользователей множеством литературы, хотя язык действительно неплохой.

Вот источники, которые помогут Вам познакомиться ближе с Python, а может и стать будущим Гвидо ван Россумом.
*Некоторые источники могут быть на английском. Не стоит этому удивляться, сейчас масса отличной литературы пишется именно на английском языке. Да и для самого программирования надо знать хотя бы базовые знания английского.

Настоятельно рекомендую прочитать первым делом книгу — Марк Лутц. Изучаем Python, 4-е издание. Книга переведена на русский язык, так что бояться не стоит, если Вы вдруг не знаете английский. Но именно четвёртое издание.

Для тех, кто знает английский, можно прочитать документацию на официальном сайте Python. Там всё довольно понятно описано.

Неплохой ресурс — Основы программирования на Python. Учебник. Вводный курс
Одна из моих недавно прочитанных книг — Язык программирования Python. Объясняется всё довольно доступно и на русском.

Хорошая книга, тоже всё доступно и на русском — Python. Подробный справочник, 4-е издание.

А если же Вы более принимаете информацию по видео, то могу посоветовать уроки от компании Google, которые ведёт Ник Парланте — ученик из Стэнфорда. Шесть видеолекций на YouTube . Но в бочке мёда тут есть капля дёгтя… Ведёт он на английском языке с английскими субтитрами. Но надеюсь, что остановит это немногих.

Что делать, если я прочитал книги, но не знаю как применять знания?

Без паники!
Советую почитать книгу Марк Лутц. Программирование на Python (4-е издание). Ранее было «изучаем», а тут «Программирование». В «Изучаем» — Вы получаете знания Python, в «Программирование» — Марк Вас учит как их применять в Ваши будущие программы. Книга очень полезная. И думаю одной её Вам хватит.
Хочу практики!

Легко.
Выше я писал о видеолекциях от Ника Парланте на YouTube, но у них есть также некие задачки на сайте. Интересные задачки, советую каждому. На английском.

Недавно школа программирования Codecademy открыла интерактивные Python-курсы. После прохождения каждого мини-курса, Вам будет позволено пройти некую «практику». Уроки ведутся на английском, но всё доступно и понятно. Начинается с переменных и типов данных.

И на окончание — хорошие закрепляющие и начинающие курсы. Learn Python The Hard Way.

Ну вот и всё!

Ну вот и всё. Теперь Вы можете учить этот язык программирования. Я кинул хорошие ресурсы и книги, и дальше всё в Ваших руках. Также не забываем про неофициальный русский Python сайт. Пусть он всегда будет у Вас под рукой.
Русский, неофициальный Python-сайт
Русский сайт программистов Python — здесь Вам всегда помогут на форуме. И много полезной информации на главной.

Дерзайте! Всем удачи.

5 распространенных ошибок начинающих программистов на Python / Habr

В первые дни работы программистом на Python все мы сталкиваемся с разными типами багов в нашем коде, которые после нескольких болезненных часов в StackOverflow оказываются не багом, а фичей Python'а. Ниже приведены 5 самых распространенных ошибок, которые делают большинство начинающих программистов на Python. Давайте немного о них узнаем, чтобы сэкономить несколько часов, задавая вопросы на страницах и в группах в Facebook.

1. Копирование словарей или списков


Когда вам надо сделать копию словаря или списка, недостаточно просто использовать оператор присваивания.

Неправильно:

>>> dict_a = {"name": "John", "address":"221B Baker street"}
>>> dict_b = dict_a

Теперь, если вы меняете или обновляете dict_b, то dict_a тоже будет изменен — и все это благодаря оператору присваивания. Используя этот оператор, вы пытаетесь сказать, что dict_b будет указывать на тот же самый объект, что и dict_a.
>>> dict_b["age"] = 26
>>> dict_b
{'address': '221B Baker street', 'name': 'John', 'age': 26}
>>> dict_a
{'address': '221B Baker street', 'name': 'John', 'age': 26}
>>>

Правильно: использовать методы copy() или deepcopy().

>>> dict_c = dict_b.copy()
>>> dict_c["location"] = "somewhere"
>>> dict_c
{'address': '221B Baker street', 'name': 'John', 'age': 26, 'location': 'somewhere'}
>>> dict_b
{'address': '221B Baker street', 'name': 'John', 'age': 26}
>>> dict_a
{'address': '221B Baker street', 'name': 'John', 'age': 26}
>>>

См. разницу между copy и deepcopy.

2. Ключи словарей


Давайте попробуем добавить значения в словарь:
>>> dict_a = dict()
>>> dict_a
{}
>>> dict_a[1] = "apple"
>>> dict_a[True] = "mango"
>>> dict_a[2] = "melon"

Если мы попробуем вывести словарь на экран, что мы увидим?
>>> dict_a
{1: 'mango', 2: 'melon'}

Что случилось, где ключ True?

Надо помнить, что класс Boolean наследуется от Integer (целых чисел). А целое число, эквивалентное True — это 1; эквивалент False — это 0. Значит, значение по ключу 1 просто переписывается.

>>> isinstance(True, int)
True
>>> isinstance(False, int)
True
>>> True == 1
True
>>> False == 0
True

3. Обновление списков или словарей


Допустим, вы хотите добавить элемент в список.
>>> list_a = [1,2,3,4,5]
>>> list_a = list_a.append(6)
>>> list_a
>>> # prints nothing

Или пытаетесь обновить словарь.
>>> dict_a = {"a" : "b"}
>>> dict_a = dict_a.update({"c" : "d"})
>>> dict_a
>>> # prints nothing

А теперь давайте попробуем упорядочить список.
>>> list_b = [2,5,3,1,7]
>>> list_b = list_b.sort()
>>> list_b
>>> # prints nothing

Почему ничего не выводится, что мы делаем не так?

Большинство методов контейнеров (такие как sort, update, append, add, и т. д.) соптимизированы в целях производительности — и избегают ненужного создания отдельных копий.

Не пытайтесь присвоить возвращаемое значение таких методов в переменную.

Правильно:

>>> list_a = [1,2,3,4,5]
>>> list_a.append(6)
>>> dict_a = {"a" : "b"}
>>> dict_a.update({"c" : "d"})
>>> dict_a
{'c': 'd', 'a': 'b'}
>>> list_a.sort()
>>> list_a
[1, 2, 3, 4, 5, 6]

4. Интернированные (Interned) строки


В некоторых случаях Python пытается переиспользовать существующие неизменяемые объекты. Интернирование строки — это один из таких случаев.
>>> a = "gmail"
>>> b = "gmail"
>>> a is b
True

Здесь мы пытались создать два различных объекта — строки. Но когда мы проверили их на эквивалентность, выяснилось, что они полностью совпадают. Такое происходит из-за того, что Python не создал другого объекта b, а сделал b указывающим на первое значение «gmail».
Все строки длиной 1 являются интернированными. Строки, в которых есть что-то за исключением ASCII-символов, цифр и знака подчеркивания, не будут интернированными.
Давайте проверим.
>>> a = "@gmail"
>>> b = "@gmail"
>>> a is b
False

Также надо запомнить, что == отличается от оператора is. Оператор == проверяет, являются ли значения эквивалентными или нет, тогда как оператор is проверяет, ссылаются ли обе переменные на один и тот же объект.
>>> a = "@gmail"
>>> b = "@gmail"
>>> a is b
False
>>> a == b
True

Так что помните про это, когда используете неизменяемые строки или операторы == и is.

5. Аргументы по умолчанию вычисляются один раз


Рассмотрим пример:
def func(a, lst=[]):
    lst.append(a)
    return lst
print(func(1))
print(func(2))

Как вы думаете, что будет выведено после двух принтов?

Давайте запустим код.

>>> def func(a, lst=[]):
... lst.append(a)
... return lst
... 
>>> print(func(1))
[1]
>>> print(func(2))
[1, 2]

Почему во втором случае выводится [1, 2]? Не должно ли это быть просто [2]?

Итак, подвох в том, что аргументы по умолчанию вычисляются только один раз.При первом вызове функции — func(1) — список оценили и поняли, что он пустой. Значит, к нему можно добавить 1. Но при втором вызове — func(2) — в списке уже есть один элемент, поэтому выводится [1, 2].

Бонус: Не надо смешивать пробелы и табы. Просто не надо.

6 основных библиотек для программирования на Python / Habr

Привет, Хабр! Представляю вам перевод статьи "6 Essential Python Libraries for Python Programming" автора VijayDeveloper.

Python (питон) — это высокоуровневый язык программирования общего назначения, который стал одним из ведущих и популярнейших в сообществе программистов. По своим возможностям он классифицируется от разработки упрощенных приложений до проведения сложных математических вычислений с одинаковым уровнем сложности.

Являясь одним из ведущих языков программирования, он имеет много фреймворков (платформ для построения приложений) и библиотек, которыми можно воспользоваться. Библиотека языка программирования — это просто набор модулей и функций, которые облегчают некоторые специфические операции с использованием этого языка программирования.

Итак, вот 6 основных библиотек для программирования на Python, о которых должен знать каждый разработчик на Python:

• Keras

Тип – нейросетевая библиотека.

Начальная версия – март 2015.

Keras – открытая нейросетевая библиотека, написанная на языке Python. Нацелена на оперативную работу с сетями глубокого обучения, при этом спроектирована так, чтобы быть компактной, модульной и расширяемой.

В дополнение к предоставлению более простого механизма для выражения нейронных сетей, Keras также предлагает некоторые из лучших функций для компиляции моделей, обработки наборов данных и визуализации графиков. На бэкэнде (сервере) Keras использует либо Theano, либо TensorFlow.

В связи с тем, что Keras создает вычислительный граф с помощью серверной инфраструктуры, а затем использует его для выполнения операций, он работает медленнее, чем другие библиотеки машинного обучения. Тем не менее, все модели в Keras являются портативными.

Особенности:

  • Легко отлаживать и исследовать, так как она полностью написана на Python.
  • Содержит многочисленные реализации широко применяемых строительных блоков нейронных сетей, таких как функции активации, уровни, цели и оптимизаторы.
  • Невероятная выразительность и гибкость делают его идеальным для инновационных исследований.
  • Предлагает несколько предварительно обработанных наборов данных и предварительно обученных моделей, таких как Inception, MNIST, ResNet, SqueezeNet и VGG.
  • Обеспечивает поддержку почти всех моделей нейронных сетей, включая свёрточную, встраиваемую, полностью подключенную, объединяющую в пул и рекуррентную. Более того, эти модели можно комбинировать для разработки еще более сложных моделей.
  • Работает как на CPU (центральном процессоре), так и на GPU (ядре процессора)

Область применения:
  • Уже используется Netflix, Square, Uber и Yelp.
  • Для исследования глубокого обучения. Принят исследователями в ЦЕРН и НАСА.
  • Популярный среди стартапов, разрабатывающих продукты, основанные на глубоком обучении.

• NumPy

Тип – техническая вычислительная библиотека.

Начальная версия – 1995 (как Numeric).

2006 (Как NumPy).

NumPy был создан Трэвисом Олифантом в 2005 году путем включения функций конкурирующей библиотеки Numarray в библиотеку Numeric и применения обширных модификаций. В бесплатной библиотеке с открытым исходным кодом есть несколько соавторов со всего мира.

Одна из самых популярных библиотек машинного обучения в Python, TensorFlow и несколько других библиотек используют библиотеку NumPy Python внутри себя для выполнения нескольких операций над тензорами.

Особенности:

  • Активная поддержка сообщества
  • Полностью бесплатный и открытый исходный код
  • Сложные матричные операции, такие как матричное умножение
  • Интерактивный и супер простой в использовании
  • Облегчает сложные математические реализации
  • Легко кодировать с удобочитаемыми концепциями

Область применения:
  • Для выполнения сложных математических вычислений
  • Для представления изображений, звуковых волн и других форм двоичных необработанных потоков в виде массива действительных чисел в N-мерном
  • Для проектов машинного обучения

• Pillow

Тип – Библиотека обработки изображений

Начальная версия – 1995 (Как Python Imaging Library или PIL)

2011 (Как Pillow)

Pillow — это библиотека Python, которая почти так же стара, как и язык программирования, для которого она была разработана. На самом деле, Pillow — это форк для PIL (Python Imaging Library). Свободно используемая библиотека Python необходима для открытия, манипулирования и сохранения разнообразных файлов изображений.

Pillow была принята в качестве замены оригинального PIL в нескольких дистрибутивах Linux, в частности, Debian и Ubuntu. Тем не менее, он также доступен для MacOS и Windows.

Особенности:

  • Добавляет текст к изображениям
  • Улучшение и фильтрация изображения, включая размытие, регулировку яркости, контур и резкость
  • Маскировка и прозрачность
  • Пиксельные манипуляции
  • Обеспечивает поддержку множества форматов файлов изображений, включая BMP, GIF, JPEG, PNG, PPM и TIFF. Обеспечивает поддержку для создания новых декодеров файлов с целью расширения библиотеки доступных форматов файлов.

Область применения:
  • Для обработки изображений

• PYGLET

Тип — Библиотека разработки игр

Начальная версия – апрель 2015

Библиотека многоплатформенного кадрирования и мультимедии для Python, PYGLET — это популярное имя для разработки игр с использованием Python. В дополнение к играм, библиотека разработана для создания визуально насыщенных приложений.

В дополнение к поддержке кадрирования, PYGLET обеспечивает поддержку загрузки изображений и видео, воспроизведения звуков и музыки, графики OpenGL и обработки событий пользовательского интерфейса.

Особенности:

  • Использование нескольких окон и рабочих столов с несколькими мониторами
  • Загрузка изображений, звука и видео практически во всех форматах
  • Нет внешних зависимостей и требований к установке
  • Предоставляется в соответствии с лицензией BSD с открытым исходным кодом, поэтому может свободно использоваться как в личных, так и в коммерческих целях
  • Обеспечивает поддержку как Python 2, так и Python 3

Область применения:
  • Для разработки визуально насыщенных приложений
  • Для разработки игр

• Requests

Тип – Библиотека HTTP

Начальная версия – февраль 2011

Requests — HTTP библиотека Python, направлена на то, чтобы сделать запросы HTTP проще и удобнее. Разработанный Кеннетом Рейтцем и несколькими другими участниками, Requests позволяет отправлять запросы HTTP/1.1 без вмешательства человека.

От Nike и Spotify до Amazon и Microsoft десятки крупных организаций используют запросы внутренне, чтобы лучше справляться с HTTP. Написанная полностью на Python, Requests доступна в виде бесплатной библиотеки с открытым исходным кодом под лицензией Apache2.

Особенности:

  • Автоматическое декодирование контента
  • Базовая/дайджест-аутентификация
  • Проверка SSL в браузерном стиле
  • Частичные запросы и время ожидания соединения
  • Обеспечивает поддержку прокси-серверов .netrc и HTTP (S)
  • Сеансы с сохранением cookie
  • Ответное тело Unicode

Область применения:
  • Позволяет отправлять запросы HTTP/1.1 с использованием Python и добавлять контенты, такие как заголовки, данные форм и многокомпонентные файлы
  • Для автоматического добавления строк запроса в URL
  • Для автоматического кодирования данных POST

• TensorFlow

Тип – Библиотека машинного обучения

Начальная версия – ноябрь 2015

TensorFlow — это бесплатная библиотека Python с открытым исходным кодом, предназначенная для решения ряда задач, связанных с потоком данных и дифференцируемым программированием. Тем не менее, символическая математическая библиотека TensorFlow является одной из наиболее широко используемых библиотек машинного обучения Python.

Разработанный Google Brain для внутреннего использования, библиотека используется для коммерческих и исследовательских целей.

Тензорными являются N-мерные матрицы, которые представляют данные. Библиотека TensorFlow позволяет писать новые алгоритмы, включающие большое количество тензорных операций.

Поскольку нейронные сети могут быть выражены в виде вычислительных графов, они могут быть легко реализованы с использованием библиотеки TensorFlow в виде последовательности операций над тензорами.

Особенности:

  • Позволяет визуализировать каждую часть графа
  • Полностью бесплатный и открытый исходный код
  • Легко обучается на CPU (центральный процессор) и GPU (ядро процессора) для распределенных вычислений
  • Огромная поддержка сообщества
  • Обеспечивает гибкость в своей работоспособности. Части, которые требуются больше всего, могут быть сделаны автономными
  • Поддерживает обучение нескольких нейронных сетей и нескольких графических процессоров для создания эффективных моделей в крупных системах
  • Использует методы, подобные XLA, для ускорения операций линейной алгебры

Область применения:
  • Для проектов машинного обучения
  • Для проектов нейронных сетей
  • В автоматизированном программном обеспечении для создания титров, таких как DeepDream
  • Машинное обучение в продуктах Google, таких как Google Photos и Google Voice Search

На этом завершается список 6 основных библиотек Python для программирования на Python. Какие библиотеки должны были/не должны были попасть в этот список? Дайте нам знать в ваших комментариях.

Изучайте Python сейчас и да прибудет с вами сила!

Как начать программировать на Python — руководства на Skillbox

запись вебинара

 2 часа2  мин.

статья

 15 мин.

Экономия времени

 1ч. 47 мин.

  1. Легко читаемый код — синтаксис языка построен таким образом, что он не позволяет писать «некрасивый» и неструктурированный код. Программа на Python выглядит как английский текст.
  2. Переносимость языка — Python является интерпретируемым языком и работает под виртуальной машиной, а это означает, что его можно запускать на разных платформах: MacOS, Linux, Windows, Android, iOS и прочих.
  3. Ускоренный цикл разработки — языку Python, в отличие от компилируемых языков программирования, таких как С, С++, С#, не нужно время на сборку и компиляцию программы, поэтому программа на Python быстро запускается и сразу показывает результат.
  4. Множество пакетов — язык имеет большое количество готовых решений и пакетов.
  5. Поддержка всех стилей программирования — императивный (приказной), объектный, функциональный.
  6. Низкий порог входа — за несколько дней можно начать писать свои первые программы.

В 2017 году Ассоциация инженеров электротехники и электроники IEEE (I triple E, «Ай трипл и») провела опрос на тему популярности языков программирования, и по его результатам Python занял лидирующие позиции.

  • Создание веб-приложений — имеет фреймворки для создания сайтов и веб-приложений, например, Django, Flask.
  • Автоматизация вычислительных комплексов — специальные серверные программы (Fabric, Ansible), которые разносят обновления по серверам, собирают информацию, позволяют автоматически инсталлировать систему и прочие процессы, которые требуют автоматизации.
  • Ведение научных исследований — обработка структурированных и неструктурированных данных огромных объемов, добыча и анализ данных в научной сфере (библиотеки NumPy, Pandas).
  • Создание полноценных десктопных приложений — создание переносимых десктоп-приложений (wxPython, pyQt).
  • Встраивание приложений в мобильные системы — написание программ и игр под мобильные устройства (kivi), а также для различных устройств (stackless python): терминалов, кассовых аппаратов, роутеров, систем видеонаблюдения.
  • Написание скриптов поведения в играх — например, в World of Tanks, EVE Online.
Множество известных компаний использует язык Python

Компания Google создает свои версии языка и фреймворков. Серверная часть Instagram написана на Python с использованием фреймворка Django. «Яндекс» использует Python для различных внутренних решений, например, в «Яндекс.Картах». В NASA пишут программы для анализа проходящих полетов, различные скрипты для автоматизации вычислительных процессов. Облачное хранилище Dropbox полностью написано на Python, и, кстати, разработчик и создатель языка Гвидо Ван Россум сейчас работает именно там.

Создатель языка Python Гвидо Ван Россум. Источник: «Википедия»

Начать писать программы на Python очень просто, для этого нужно:

  1. Установить дистрибутив последней версии www.python.org/downloads/.
  2. Установить подходящий текстовый редактор www.sublimetext.com/3.

После установки дистрибутива запускаем консоль Python через появившийся ярлык в меню «Пуск» и тестируем работоспособность: например, вводим выражение «2 + 2». Если видим результат 4, значит, все работает.

Работать в консоли не очень удобно, поэтому закроем ее, перейдем в текстовый редактор Sublime Text3 и настроим его для работы.

Для начала в главном меню редактора во вкладке Tools → Build System → Python укажем, что собираемся использовать синтаксис Python. Далее пропишем простую команду print(‘Hello world’), сохраним файл с расширением .py и запустим на выполнение комбинацией клавиш Ctrl + B. Если в консоли редактора вы увидите надпись «Hello world», значит, все настроено правильно и можно приступать к работе.

В данном примере мы напишем скрипт, который будет рисовать дерево. Для работы с графикой в открытом доступе существует специальная Python-библиотека simple_draw. Чтобы установить ее, необходимо открыть командную строку (cmd) и прописать в ней команду pip install simple_draw.

Для начала давайте представим, из чего состоит структура дерева. Это ствол и ветки. В нашей программе дерево будет строиться из векторов — направленных отрезков. Попробуем нарисовать вектор. Перейдем в редактор, создадим новый файл draw.py и пропишем следующий код:

import simple_draw

simple_draw.resolution = (1200, 600)

point = simple_draw.get_point(600, 5)

angle, length, width = 90, 100,3 

vector_1 = simple_draw.Vector(point, angle, length, width)

vector_1.draw()

simple_draw.pause()

Для начала мы указываем, что хотим импортировать в нашу программу библиотеку simple_draw. Затем задаем разрешение окна для отрисовки —1200 на600 пикселей.

Далее создаем переменную point (точка) и с помощью метода (функции) get_point задаем начальную точку, из который будет выходить вектор, —600 пикселей от левого края экрана и 5 пикселей от низа экрана.

Чтобы создать объект Vector, нужно задать ему такие параметры, как точка начала вектора — point, угол отклонения — angle (90 градусов), длина — length (100 пикселей) и толщина линии — width (3 пикселя). Как видно из кода, все эти переменные можно записать в одну строчку.

Переменная vector_1 будет содержать в себе объект — вектор, а чтобы отрисовать его в окне, применим к нему метод draw (рисовать). Сохраним и запустим скрипт.

Представим, что мы отрисовали ствол дерева. Теперь попробуем создать еще несколько векторов, чтобы нарисовать ветви. У дерева может быть огромное количество веток, поэтому придется создавать и большое количество векторов. Такой код будет слишком громоздким и длинным. Чтобы этого избежать, автоматизируем процесс рисования векторов и создадим функцию branch, принимающую на вход параметры point, angle, length и width, которая и будет рисовать ветви.

def branch(point, angle, length, width):

vector = simple_draw.Vector(point, angle, length, width)

vector.draw()

return vector.end_point, angle - 30, length * 0.8, width

Данная функция создает вектор с теми параметрами, которые ей передаются в скобках, отрисовывает его, а затем возвращает конечную точку отрисованного вектора (vector.end_point), угол отклонения, который на30 градусов меньше предыдущего (angle –30), длину вектора, немного меньшую исходной (length*0.8) и ширину (width). Попробуем с ее помощью создать несколько новых ветвей.

import simple_draw

simple_draw.resolution = (1200, 600)

def branch(point, angle, length, width):

vector = simple_draw.Vector(point, angle, length, width)

vector.draw()

return vector.end_point, angle - 30, length * 0.8, width

point = simple_draw.get_point(600, 5)

angle, length, width = 90, 100,3 

point_2, angle_2, length_2, width_2 = branch(point, angle, length, width)

point_3, angle_3, length_3, width_3 = branch(point_2, angle_2, length_2, width_2)

point_4, angle_4, length_4, width_4 = branch(point_3, angle_3, length_3, width_3)

point_5, angle_5, length_5, width_5 = branch(point_4, angle_4, length_4, width_4)

simple_draw.pause()

Мы нарисовали4 вектора. Каждый последующий вектор исходит от конца предыдущего и отличается длиной и углом отклонения, тем самым формируя изгиб ветви дерева. Но если мы снова представим реальное дерево, то чтобы отрисовать его, потребуется еще множество векторов. Задача программиста — написать как можно более компактный, универсальный и красивый код.

Поэтому сейчас пора освоить такую важную вещь, как рекурсия. Рекурсия — это когда функция внутри своего тела вызывает саму себя. Сократим немного код и перепишем функцию.

import simple_draw

simple_draw.resolution = (1200, 600)

def branch(point, angle, length, width):

if length < 10:

return

vector = simple_draw.Vector(point, angle, length, width)

vector.draw()

branch(vector.end_point, angle - 30, length * 0.8, width)

point = simple_draw.get_point(600, 5)

angle, length, width = 90, 100,3 

branch(point, angle, length, width)

simple_draw.pause()

Чтобы функция до бесконечности не вызывала саму себя, нужно установить ей условие, при котором она будет останавливать выполнение. То есть мы указываем, что когда длина вектора при очередном вызове окажется меньше10 пикселей, то функция завершит свое выполнение и дальше ветви рисовать не будет.

Теперь сделаем так, чтобы с конца каждой ветви дерева исходили вправо и влево другие ветви, меньшего размера. Для этого в тело функции нужно добавить еще один вызов самой себя, в котором параметр angle будет увеличиваться на30 градусов. Таким образом ветви будут отрисовываться и вправо (angle –30), и влево (angle +30).

Добавим немного красоты нашему дереву и сделаем так, чтобы цвет каждой ветви генерировался случайным образом. Для этого внутри функции vector.draw() в скобках укажем параметр simple_draw.random_color() — это функция, которая возвращает случайный цвет.

Таким образом, конечный код выглядит следующим образом:

import simple_draw

simple_draw.resolution = (1200, 600)

def branch(point, angle, length, width):

if length < 10:

return

vector = simple_draw.Vector(point, angle, length, width)

vector.draw(simple_draw.random_color())

branch(vector.end_point, angle - 30, length * 0.8, width)

branch(vector.end_point, angle + 30, length * 0.8, width)

point = simple_draw.get_point(600, 5)

angle, length, width = 90, 100,3 

branch(point, angle, length, width)

simple_draw.pause()

Запустим на выполнение и получим красивое, разноцветное дерево.

Как видите, небольшая функция за нас сделала всю работу. Изменив ее параметры и немного «поиграв» с кодом, можно добиться различных форм и видов деревьев.

Python — очень перспективный и востребованный язык. Рассмотрев наглядный пример, мы видим, что его синтаксис и правда прост, а код — легко читаем. О возможностях и преимуществах перед другими языками мы тоже успели поговорить.

В ряды Python-разработчиков постоянно вступают новые программисты, расширяя и без того немалую базу знаний и открытого исходного кода. Надеемся, что после прочтения статьи вы тоже всерьез задумаетесь об изучении языка Python и выберите его в качестве основного. А заняться им вы сможете на курсе «Python-разработчик с нуля (2018)» от компании Skillbox.

Курс «Python-разработчик с нуля»

Практический 4-х месячный курс для тех, кто хочет научиться основам программирования на универсальном, понятном и лаконичном языке с индивидуальным наставником, а также создать свою первую программу на Python и получить реальный опыт разработки.

  •  32 часа теории и 16 практических заданий
  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы

Требуется «Разработчик Python» — Хабр Карьера

Мы создаём iOS- и Android-приложения для бизнеса: разрабатываем удобные мобильные продукты, которыми ежедневно пользуются миллионы людей. e-Legion — сертифицированное агентство Google, которое входит в топ российских и зарубежных рейтингов.

Сейчас мы расширяем нашу команду backend разработчиков, ищем себе коллегу, который имеет опыт коммерческой разработки на Python от двух лет с опытом работы в команде.

Чем предстоит заниматься:

В ваши обязанности будет входить анализ требований, проектировка и написание кода согласно ТЗ, написание интеграционных тестов (мы не фанатики TDD, у нас прагматичный подход), взаимодействие с frontend разработчиками и всей командой в целом.

Важно знать:

  • Принципы работы HTTP;
  • Python 3;
  • Django Framework и смежные с ним библиотеки и утилиты;
  • Celery;
  • Git.

Необходимые навыки:

  • Python 3,
  • Django Framework и сопутствующие ему библиотеки и утилиты,
  • asyncio, aiohttp и другие асинхронные библиотеки,
  • PostgreSQL или другие реляционные БД,
  • хорошее знание принципов работы HTTP и смежных сетевых протоколов,
  • английский язык на уровне чтения и написания технической документации,
  • Git.

Бонусом будет знание:

  • знание SQL и реляционной алгебры,
  • знакомство с Redis, RabbitMQ,
  • опыт работы с Ansible,
  • основы администрирования Linux,
  • знание других языков программирования, фреймворков и технологий,
  • понимание микросервисной архитектуры, опыт разработки высоконагруженных систем.

Бонусы

Мы предлагаем:

  • Работа full-time. Офис в 7 минутах от ст.м. Старая деревня;
  • Гибкий график. Главное, чтобы задачи выполнялись качественно и вовремя;
  • Компенсация спорта, обучения, ДМС - на выбор;
  • Кикер, настольный теннис, душ в офисе, кофе/чай, печеньки;
  • Работу с коллегами, с которыми интересно и душевно.

Где перспективно и адекватно использовать Python / Habr

В прошлой статье мы уже обсудили с вами причины, по которой Python нельзя назвать идеальным языком для новичков, хотя на том же Хабре бытует мнение, что Python – это выбор номер один и вообще топчик.

В этой статье мы с вами обсудим тот перечень направлений Питона, который я выделяю наиболее перспективными для приложения своих сил и времени для молодых специалистов. Данный вывод делается на основе моего анализа – изучение областей и инструментов питона и сравнивать их эффективность с аналогами на других платформах.

Что ты можешь сделать на Питоне


Хотя питон является языком общего назначения, и как говорится, все двери перед тобой открыты, на самом деле использование языка сильно ограничивается теми инструментами и технологиями, которые были в нем разработаны в ходе эволюционной борьбы с другими технологиями. Поэтому приступаем к обзору.

Микроконтроллеры (весьма сомнительно)


Хотя Андрей Власовских на прошедшем PYCON Russia 2017 в своей фирменной манере с энтузиазмом рассказывал о том, как программировать микроконтроллеры на таком инструменте, как MicroPython, а Кирилл Борисов даже предлагал изучить некоторую зарубежную литературу, ситуация в общем никакая.

Список микроконтроллеров, которые поддерживаются Python, стремится к нулю, коммерческая эффективность и наличие предложений по работе практическая нулевая. С учетом того, что есть более традиционные способы инструменты программирования, пока какая-то большая компания не вложится в этом направление, тут делать нечего.

Девопс (адекватно)


Анализ рынка показывает, что примерно треть всех вакансий, где упоминается Python, относятся к сфере DevOpsa. Однако Python идет не основным инструментом, а той технологией, которую знать желательно. Это связано с тем, что Python практичности полностью сместил Perl для Linux, и неплохо так подвинул Bash в области написания крупных скрипов и более крупных серверных компонентов. Также к этому добавляется то, что интерфейс многих тулзов принимает Python в качестве языка сценариев.

Если вы хотите развиваться в сфере Девопса, то знание Питон вам будет большим плюсом, все остальные проходят эту сферу стороной.

Что касается коммерческой перспективы (стартапа) данного направления, то сложно представить человека, который бы смог написать и монетизировать какой-то инструмент, не имея опыта 5+ лет в области девопса.

Тестирование (адекватно)


Хотя главным инструментом автоматизации тестирования является кровавая Java, которая имеет огромный набор фреймворков и готовых решений, порой небольшие компании используют Python для полноценного тестирования, либо написания сценариев для тулзов, типа Яндекс.Танк с его BFG.

Практика показывает, что хотя Python может полноценно справиться с задачей тестирования, использование Java является более прямолинейным и надежным решением.
Но если говорить в общем, то адекватный специалист по тестированию должен одинаково хорошо использовать Python и Java для своей области.

Вакансий под тестирование примерно также треть от общей массы, часто в вакансиях указывают знание и Python и Java одновременно.

Desktop development (сомнительно)


В настоящий момент язык Python имеет 5 кросc-платформенных инструментов, которые позволяют писать «полноценные» приложения под Windows/Linux/Mac
  • Tkinter
  • PyQt
  • PyGTK
  • WxPython
  • Kivy (Условно)

Однако практика показывает, что ни один из инструментов не делает 100% кросс-платформенное приложение, которое бы нативно выглядело на каждой из платформ. То там, то там появляются различные косяки, нестыковки, битые контроллеры и прочая грязь.

Поэтому можно с уверенностью сказать, что писать коммерческий Desktop на питон – это весьма сомнительная затея, и компании этим редко занимаются (либо переписывают при первой же возможности, как это сделал DropBox).

Что касается внутренних инструментов, то использование небольших GUI-приложений применяется, но искать целенаправленно Desktop Python разработчиков не будут.

Кто же хочется заняться этой сферой более полно, прошу к Игорю Новикову, который нашел неплохой способ сшить Франкенштейна с помощью абстракционного слоя – ссылка

Mobile Development (весьма сомнительно)


Все плохо, в качестве pet проектов можно использовать Kivy, для реальной разработки весьма сомнительно, вакансий на Kivy нет.

Т.е. как, я лично разговаривал с рядом людей, которые имели свой веб-проект на Python и для захвата большой аудитории писали приложения на Kivy, и у них его даже использовали, но это имеет вид «Программист пишет то, на чем хочет».

Машинное обучение и Data science (адекватно и перспективно)


Это одна из самых хайповы областей современного IT-мира, где используется Python в качестве инструмента апробации. Python имеет ряд удобных библиотек машинного обучения и научных расчетов: Pandas, NumPy, SciPy, Scikit-Learn, которые позволяют достаточно быстро построить рабочие модели. И они на самом деле неплохо работают.

Что касается использования, то Python используется в качестве инструмента апробации, либо на небольших задачах. Если проект большой, то обычно модель пишут на Java/Scala/C++, а специалист по обучению уже выступает в качестве консультанта/аналитика.

Сложность этого направления заключается в том, что у вас должны быть высокие знания в области математики и статистики, практически всегда будет спрашиваться высшее технические, математическое образование.

По вакансиям все довольно неплохо, но в таких вакансиях требуется не знание Python, а ваша голова.

Тем, кто хочет быстренько пощупать данное направление, советую прочитать книгу: «Vvedenie_v_mashinnoe_obuchenie_s_pomoschyu_Python_-_A_Myuller_S_Gvido_2017» — есть на торрентах, читается быстро, представление дает хорошее.

Веб-скрапинг (возможно, но сомнительно)


Питон имеет три вещи, которые делают его весьма эффективными в области веб-скраппинга, бибиотеку Requests, beautifulsoup и АПИ для Selenium. Если сюда подключиться библиотеки для компьютерного зрения и Машинное обучение, то получаются весьма эффективные инструменты.

Проблема заключается в том, что вакансий в этой сфере мало, основные клиенты сидят на фрилансе, которые предлагают за фикс написать им скрипты парсинга для их говно-сайтов, спам-машин, и изредка генераторов отзывов.

Область интересная, но денег в ней мало.

Компьютерное зрение (сомнительно)


В питоне есть ряд инструментов, которые позволяют писать инструменты компьютерного зрения, они даже используются местами в коммерческих продуктах, либо в качестве компонентов, например, для веб-скраппинга. Однако Питон явно нельзя назвать подходящим инструментов, поэтому использование крайне ограничено, вакансий практически нет.

GameDev (сомнительно)


Практически в каждом обсуждении разработки игры на Python приводят в качестве примера eve online и WarGaming. Однако в первом случае используется stateless python, а во втором случае все ограничивается языком написания сценариев.

Что же касается реального использования, то у вас появляется три движка Kivy, PyGame, Panda3D, если первые два больше подходят для пет-проектов, то третий реально использовался на боевых проектах неплохого качества, правда эти проекты были 2004 года. Что как бы намекает, что использование проверенных движков на других языках типа Unity или Game Maker выглядит более убедительно.

Однако незаметно сюда крадется движок Ren’Py, который внезапно стал лучшим движков для написания визуальных романов (страдальческих историй для девочек), которые неплохо окупаются даже в рамках РФ. Серия «7 демонологов Петра Великого», тому доказательство.

Вакансий в GameDev для питона естественно нет, но деньги на «стартапе» поднять можно при должной сноровке. Но надежней взять другой язык и проверенные движки.

Веб-разработка (адекватно и перспективно)


Питон входит в тройку языков (Python, PHP, Ruby), которые обладают развитыми экосистемами быстрой разработки веб-проектов адекватного качества. Ключевыми платформами тут являются:
  • Django (монолитный синхронный фреймворк)
  • Flask (микро синхронный фреймворк)
  • Tornado (монолитный асинхронный фреймворк)
  • Twisted (монолитный асинхронный фреймворк)
  • Aiohttp (микро асинхронных фреймворк)

В настоящий момент большую часть рынка занимает фреймворк Django, но с приходом идей микросервисов постепенно обороты стал набирать Flask. Что касается асинхронности, то тут все сложно, так как Tornado и Twisted признаны устаревшими (хотя на них работают многие компании, тот же Тиньков), а aiohttp весьма сырой, и его использование ставится под большим вопросом.

Сила Python заключается в том, что он позволяет быстро разрабатывать комплексные веб-приложения, имеет огромное число качественных модулей, прекрасно подходит для сервисов статистики и аналитики (где, в общем, и идет для него большая часть вакансий). Данное направление занимает оставшуюся треть всех вакансий.

Отдельно хочется отметить написание ГИС сервисов на Python, которые хотя и имеют вполне адекватный инструментарий для работы с геоданными, но все же использование Java для этих целей выглядит перспективней.

Выводы об использовании питона


1) Что касается сферы девопса и тестирования, то Питон является ключевым инструментом профессии, который обязателен для каждого адекватного специалиста. Питон в данном случае не учат, к нему приходят по необходимости.

2) Наиболее перспективными выглядят сферы веб-разработки и машинного обучения (аналитики), которые явно выделяют питон на фоне его конкурентов в виде PHP и Ruby. И если вы хотите изучить питон, то вам желательно сосредоточится именно на этих сферах и не тратить свое время на что-то другое. Под это есть вакансии, на этом можно построить стартап.

3) Все остальные сферы, хотя и предлагают определенные инструменты для решения проблем, но перспективность использования этих инструментов выглядит весьма сомнительно. И главное, найти оплачиваемую работу на эти сферы практически невозможно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *