Перейти к содержанию

Python: базовые операторы

Программа Python состоит из операторов. Каждый можно рассматривать как действие, которое должен выполнить компьютер.

В самом простом случае оператор Python — это одна строка кода, конец которой означает конец оператора. Простой оператор может, например, вызвать одну функцию:

print('Всем привет!')

Переменные

Переменная - это имя для ячейки оперативной памяти, в которой хранится некоторое значение (или целый объект).

Переменная создается при первом присваивании некоторому символу значения.

x = 'моя строка'

print(x)  # напечатает 'моя строка'

За раз (т.е., в одной строке) можно присвоить сразу нескольким переменным.

x, y, z = 1, 2.0, 'строка'

print(y)  # напечатает 2.0

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

x = 'моя строка'
y = x

print(y)  # напечатает 'моя строка'

Удалить переменную можно оператором del. Само значение в ячейке памяти при этом остается. Если на ячейку указывает другая переменная, то можно продолжить использовать это значение. Если же удаляемая переменная была единственной, то область памяти будет вскоре освобождено встроенным в Python сборщиком "мусора".

x = 'моя строка'
y = x
del x

print(х)  # появится ошибка NameError: name 'x' is not defined
print(y)  # напечатает 'моя строка'

Простые типы данных

Если следующие встроенные в язык простые типы данных:

  • int - целое число
  • float - число с плавающей точкой
  • str - строка
  • bool - булево (логическое) значение
a = 1
b = 2.0
c = 'строка'
d = True  # или False

Над простыми типами данных можно выполнять интуитивно-понятные операции.

print(1 / 2)  # напечатает 0.5

print('моя' + ' строка')  # напечатает 'Моя строка'

print(True and False)  # напечатает False
print(True or False)  # напечатает True

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

print(1 + 1.5)  # напечатает 2.5

print(1 + 'строка')  # будет ошибка TypeError: unsupported operand type(s) for +: 'int' and 'str'

print(True + 2)  # ошибки не будет, напечатает 3, но так лучше не делать)

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

# Приведение к типу int
# --------------------------------------------
print(int(1.6))  # напечатает 1
print(int('1'))   # напечатает 1
print(int('один'))  # ошибка ValueError: invalid literal for int() with base 10: 'один'
print(int('1.6'))   # ошибка ValueError: invalid literal for int() with base 10: '1.6'

# Приведение к типу float
# --------------------------------------------
print(float(1))  # напечатает 1.0
print(float('1'))  # напечатает 1.0
print(float('1.6'))  # напечатает 1.6
print(float('1,6'))  # ошибка ValueError: could not convert string to float: '1,6'

# Приведение к типу str
# --------------------------------------------
print(str(1))  # напечатает '1'
print(str(1.6))  # напечатает '1.6'
print(str(True))  # напечатает 'True'
print(str(None))  # напечатает None (о None - ниже)

# Приведение к типу bool
# --------------------------------------------
print(bool(1))  # напечатает True
print(bool(0))  # напечатает False
print(bool(1.6))  # напечатает True
print(bool(0.0))  # напечатает False
print(bool(0.00000001))  # напечатает True
print(bool('строка'))  # напечатает True
print(bool(''))  # напечатает False
print(bool(None))  # напечатает False (о None - ниже)

Для получения типа, к которому принадлежит значение, используется функция type(). Для проверки того, является ли значение указанного типа, используется isinstance().

print(type(a))  # напечатает <class 'int'>
print(isinstance(a, str))  # напечатает False

Тип для хранения даты (или даты со временем) не является простым в Python. Для работы с ним создан даже отдельный пакет datetime.

None

В Python есть особое значение (константа), которое можно интерпретировать как "отсутствие" значения.

x = None  # эта переменная не указывает ни на одну из ячеек памяти

Для проверки того, пусто или нет значение в ячейке нужно использовать ключевое слово is.

print(x)  # напечатает None
if x is None:
    print('Нет значения')  # напечатает 'Нет значения'

Импорт модулей

Большинство стандартных функций языка, а также все сторонние функции, размещаются в модулях. Чтобы использовать модуль в текущей программе его нужно импортировать. Для этого служит оператор import.

import <название_модуля>

Хорошим тоном считается размещение всех операторов импорта в первых строках файла с программой. Если вы работаете с jupyter ноутбуком, то лучшими местами для размещения импортов являются:

  • Самая первая ячейка ноутбука. Тут следует размещать те операторы импорты тех модулей, которые используются в более чем одной ячейке ноутбука.
  • Первые строки ячейки. Тут следует размещать операторы импорта тех модулей, которые используются только в данной ячейке.
import pandas
import numpy

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

from pandas import read_csv

# ... и где-то ниже
read_csv('путь_к_файлу.csv')

В одной строке from .. import .. можно через запятую указывать несколько имен, которые импортируются из модуля.

from pandas import read_csv, read_excel

from pyspark.sql.types import StructField, StructType, IntegerType, StringType
from pyspark.sql.functions import concat, col, lit

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

import pandas as pd  # ниже в файле можно использовать просто pd
from pandas import read_excel as read_xls  # ниже в файле можно использовать просто read_xls

pd.read_csv('путь_к_файлу.csv')
pd.read_xls('путь_к_файлу.xls')