Основы Python — изучаем базовые концепции языка

Перевод статьи «Python Basics: Understanding the core concepts»

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

Мы разберем самые основы Python. Начнем с типов данных, а ближе к концу статьи затронем приведение типов и срезы. Также мы познакомимся с некоторыми основными концепциями программирования. 

Итак, приступим!

Переменные

Переменные — это именованные участки памяти компьютера, в которых хранятся некоторые значения. Переменные могут хранить любой тип данных. Например, у нас есть пара значений — 10 и 20. Мы хотим их сложить и сохранить сумму для дальнейших операций. Давайте посмотрим, что нам нужно для этого сделать:

a = 10   # переменная a
b = 20   # переменная  b
c = a + b  # сумма а и b

Примечание редакции Pythonist: рекомендуем очень подробную статью об именах и присваивании значений — «Факты и мифы об именах и значениях в Python».

Типы данных

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

Числа

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

a = 5 
print(type(a))                  
# <class 'int'>

b = 1+4j
print(type(b))     
# <class 'complex'>

c = 4.5
print(type(c))  
# <class 'float'>

Посмотрите на вывод внимательно: класс int переменной a = 5 — предопределенный. Это значит, что его не нужно определять вручную, это уже сделано за нас. Целые числа (int) могут быть любой длины, но есть ограничение — объем вашей памяти. Числа с плавающей точкой (float) имеют ограничение точности — 15 знаков после точки. Если попытаетесь ввести больше — лишние будут отброшены.

a = 1.12345678912345678912
print(a) 
# 1.1234567891234568

Строки

Строка (str) — это набор символов Юникод. Для определения строки мы используем одинарные или двойные кавычки. 

Пример:

a = 'c'
print(type(a))
# <class 'str'>

b = "hello"
print(type(b))
# <class 'str'>

c = 'hello python'
print(type(c))
# <class 'str'>

Списки

Списки (list) — упорядоченная последовательность элементов. Это один из самых часто используемых типов данных в Python. Списки очень похожи на массивы, но в списках мы можем хранить элементы разного типа.

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

lst = [1,2,3,4,5.3]
print(type(lst))
# <class 'list'>

lst = [1,'hello',3,4,5.3,'pythonist']
print(type(lst))
# <class 'list'>

lst = ['hello','pythonist']
print(type(lst))
# <class 'list'>

lst = [1,'hello',3,4,5.3,'pythonist']
print(lst[0])
# 1

lst = [1,'hello',3,4,5.3,'pythonist']
lst[0]=10
print(lst)
# [10, 'hello', 3, 4, 5.3, 'pythonist']

Кортежи

Кортежи (tuple) — это также упорядоченные наборы элементов. От списков их отличает одно: кортежи неизменяемы. То есть, после объявления кортежа изменить его элементы мы не сможем.

Кортежи намного быстрее списков. Для получения доступа к элементам кортежа мы можем использовать индексы и срезы. 

t = (1,2,3)                              
print(type(t))
# <class 'tuple'>

t = (1,'hello',3.2)
print(type(t))
# <class 'tuple'>

t = (1,'hello',3.2)
print(t[0])
# 1

Множества 

Множество (set) — неупорядоченный набор элементов. Определяется множество с помощью фигурных скобок — {}. Все элементы разделяются запятыми. 

В множестве не может быть дубликатов. Это значит, что порой их можно использовать для того, чтобы избавиться от повторяющихся элементов списке. С множествами мы можем производить самые разные операции, например, объединение (union), пересечение (intersection).

Обратите внимание: получить доступ к элементу множества по индексу невозможно — они не упорядочены! 

a =  {1, 2, 3, 4, 5}
print(type(a))
# <class 'set'>

a =  {1, 2, 3, 4, 5}
print(a[0])
# TypeError: 'set' object is not subscriptable

a = {1, 2, 3, 4, 5}
b = {6,5,3,4}
print(a.union(b))
# {1, 2, 3, 4, 5, 6}

a = {1, 2, 3, 4, 5}
b = {6,5,3,4}
print(a.intersection(b))
# {3, 4, 5}

Словари

Словарь (dict) — набор элементов, в котором элементы хранятся в виде пар ключ-значение. Такая система оптимизирована под поиск значений, из-за чего словари часто используют для хранения огромных массивов данных. Определяются словари с помощью фигурных скобок в следующем виде —  {ключ: значение}. Пары элементов отделяются запятыми.

dict = {'name':'ivan', 'number':'99029922', 'address':'Moskva'}

print(dict)
# {'name': 'ivan', 'number': '99029922', 'address': 'Moskva'}

print(dict.keys())
# dict_keys(['name', 'number', 'address'])

print(dict.values())
# dict_values(['ivan', '99029922', 'Moskva'])

Операторы

Операторы нужны для проведения операций между двумя элементами. Например, в a + b оператором является +. Он указывает компилятору на то, что нужно сложить две переменные. 

В Python есть 7 типов операторов:

  • Арифметические операторы: *, +, /, **, %, —
  • Операторы присваивания: =, +=, =+, -=, -=, !=
  • Операторы сравнения: <, >, !<, !>, =<, >=, ==
  • Логические операторы: and, or, not
  • Операторы идентичности: is, is not
  • Операторы членства: in, not in
  • Битовые операторы: &, ^, ~, <<, >>

Индексы

Индексы используются для получения доступа к элементам коллекций (например, строк или списков). В Python есть два типа индексов — положительные и отрицательные. Положительные начинаются с 0, а отрицательные — с последнего элемента коллекции. 

Пример:

# Положительные индексы

a = 56
print(a[0])
# TypeError: 'int' object is not subscriptable

b = 'python'
print(b[0])
# 'p'

c = 3.14
print(c[0])
# TypeError: 'float' object is not subscriptable

d = [1,2,'hello',4]
print(d[2])
# hello

print(d[2][1])
# e

print(d[2][4])
# o

d = [1,2,'hello',4]
print(d[-1])
# 4

print(d[2][-4])
# e

print(d[2][-1])
# o

str = "hello python"
print(str[-3])
# h

Срезы

Срезы используются для получения доступа к последовательности элементов коллекции. Внимание: верхняя граница всегда отбрасывается. То есть, a[0:3] — это элементы с индексами 0, 1 и 2, а вот элемент с индексом 3 в срез уже не войдет. 

b = 'python'

print(b[0:2])
# py

d = [1,2,'hello',4]
print(d[0:2])
# [1,2]

print(d[2][1:4])
# 'ell'

print(d[2][1:-1])
# 'ell'

Функционал среза можно расширить, добавив третий параметр — шаг.

lst = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

print(lst[0:20:2])
# выводим все нечетные числа в промежутке от 0 до 20

print(lst[1:20:2])
# выводим все четные числа в промежутке от 0 до 20

strr = "hello python"

print(strr[0:8:4])
# ho

Приведение типов

Приведение типов позволяет сконвертировать один тип данных в другой. Это может оказаться полезным во многих ситуациях. 

Пример:

a = 10

print(type(a))
# <class 'int'>

a = str(a)
print(type(a))
# <class 'str'>

a = float(a)
print(type(a))
# <class 'float'>

a = list(str(a))
print(type(a))
# <class 'list'>
print(a)
# ['1', '0', '.', '0']

lst = [1, 2, 3, 4, 5, 1, 2]
lst = set(lst)
print(type(lst))
# <class 'set'>
print(lst)
# {1, 2, 3, 4, 5}

lst = tuple(lst)
print(type(lst))
# <class 'tuple'>
print(lst)
# (1, 2, 3, 4, 5)

Выводы

В этой статье мы разобрали основы Python — самый необходимый минимум. Обратите внимание, что все в статье — обязательно к изучению, если вы новичок.