Инструменты пользователя


Основы синтаксиса

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

  • Типы
    • Базовые неизменяемые
      • Числовые
        • Целые, действительные, комплексные числа и логический тип
      • Перечислимые
        • Строки, байтовые строки
      • None
    • Базовые изменяемые
      • Перечислимые
        • Списки, словари, наборы

Некоторые базовые типы данных

Тип Описание Примечание Пример
int Целое число Длина не ограничена (при выходе за пределы машинного long int включается «длинная» арифметика) 42
float Число с плавающей запятой Машинный double точнее в sys.float_info 3.14159
str Строка Типа «символ» нет, символ — это строка из одного символа
"привет"
bytes Байтовая строка Типа «байт» нет, байт — это байтовая строка из одного символа
b"hell\x00"
bool Логический тип Значения True и False True
NoneType Пустой объект Единственное значение None None

Все эти типы являются неизменяемыми (immutable). С точки зрения памяти новая переменная создается при каждом присваивании.

Присвоение значений и динамическая типизация

Python — язык со строгой динамической типизацией.

Переменные объявляются в момент присвоения значения, а тип переменной определяется по правой части выражения.

# Комментарий: 
a = 5
b = 5.5
c = "привет"
d = b"\x00\x7f\x2e"
e = True
f = None

При повторном присваивании типы не проверяются, а создается новая переменная с тем-же именем.

d = 42 # Успешно: d теперь имеет тип int и значение 42

При выполнении прочих операций типы проверяются

d = a + c # Ошибка: нельзя выполнить + для типов int и str

Строки

s = "привет '!' "
s = 'привет "!" '
s = '''привет
я длинная строка'''
s = 'Строка \nс экранированием\n'
s = r'Строка без \n экранирования'
s = b'Byte String - Only Ascii and \x24'

Распространенные непечатные символы

Символ Значение
\n Новая строка
\t Табуляция
\r Возврат каретки
\u???? Символ Unicode: ???? — код символа (для строк)
\x?? Байт ?? — код байта (для байтовых строк)
\\ Символ \

Проблемы с экранированием возникают при работе с именами папок в Windows:

pth = 'C:\new_files\ret_id' # Ошибка \n и \r недопустимы в имени папки
pth = 'C:\\new_files\\ret_id' # Все хорошо
pth = r'C:\new_files\ret_id' # Все хорошо

Функций, операторы, модули

Функции

Функции вызываются стандартно:

print("Привет!")

Могут принимать:

# Аргументы по порядку
foo(1, 2, "test")

# Аргументы по имени
bar(arg = 2, namedarg = "hello")

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

bar(1, 2, arg = 2, namedarg = "hello") # Правильно
bar(arg = 2, namedarg = "hello", 1, 2) # Ошибка

Функция может возвращать одно или несколько значений, а также None.

loo(24)

x = foo(24)

x,y,t = bar(42)

Функция в Python — объект специального типа:

def foo(x, y):
    return x + y

bar = foo

bar(2, 3) # 5

def comcall(x, y, fun):
    return fun(x, y)

comcall(2, 3, foo) # 5

Некоторые важные встроенные функции

Функция Назначение
len(x) Длина x, например строки, возвращает int
abs(x) Абсолютное значение x
type(x) Тип данных x, возвращает тип
print(x) Печать на экран x, возвращает None
input(x) Ввод пользователя в командной строке, x - строка приглашения, возвращает str

Операторы

Об операторах надо думать, как об упрощенной форме записи вызовов функций:

y = 1+2*3 # тоже, что и y = __add__(1,__mult__(2,3))

Операторы и вызовы функций можно свободно смешивать:

y = 2*len(x)+1

Многие операторы имеют сокращенную форму записи:

y = y + 1
y += 1

Арифметические операторы

Оператор Действие Пример
+
Сложение для числовых типов
2+5
+
Конкатенация для перечислимых типов
"a"+"b"
-
Вычитание
2-5
*
Умножение для числовых типов
2*5
*
Повторение если переменная перечислимого типа умножается на int
2*5, "a"*2
**
Возведение в степень
2**5
/
Действительное деление тип результата всегда float
2/5
//
Целочисленное деление
2//5
%
Остаток от деления
2%5
%
Операция подстановки для str
"hello %s" % "world"

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

Некоторые логические операторы

Оператор Действие Пример
not
Логическое НЕ для bool
not x
and
Логическое И для bool
x and y
or
Логическое ИЛИ для bool
x or y
>, <, >=, <=
Неравенство, возвращает bool
x >= y
==
Равенство, возвращает bool
x == y

Операторы над составными типами

Оператор Действие Пример
[x]
Индексирование переменных перечислимых типов
data[x]
.
Обращение к полю или методу объекта или модуля
data.x, data.foo(2)
in, not in
Содержание, возвращает bool
x in data

Подробнее: https://docs.python.org/3/reference/expressions.html

Модули

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

import math
math.cos(3) # Успешно: вызван метод ''cos'' модуля ''math''
cos(3) # Ошибка: метода ''cos'' неизвестен

from math import cos
cos(3) # Успешно: вызван метод ''cos'' модуля ''math''

import math as m
m.cos(3) # Успешно: вызван метод ''cos'' модуля ''math''

Собственные модули

Аналогично происходит импорт из одного файла в другой: если я хочу вызвать метод foo из файла myfuncs.py, то мне следует воспользоваться одним из следующих вариантов:

import myfuncs
myfuncs.foo()

from myfuncs import foo
foo()

Специальной командой from myfuncs import * можно импортировать все доступные методы из модуля, но это считается плохим стилем.

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

Типы автоматически не приводятся. Но типы int, float и bool можно смешивать в арифметических выражениях. Результат будет определяться наиболее емким типом (float > int > bool).

Исходный тип — переменная x
Целевой тип int float str bytes bool
int = round(x), ceil(x)¹, trunc(x)¹ int(x) unpack(fmt,x)² int(x)
float float(x) = float(x) unpack(fmt,x)² float(x)
str str(x) str(x) = x.decode(encoding) str(x)
bytes pack(fmt,x)² pack(fmt,x)² x.encode(encoding) = pack(fmt, x)²
bool bool(x) bool(x) bool(x) bool(x) =

¹ — из модуля math

² — из модуля struct

Функции print, input

Важные глобальные функции для работы в консоли:

print — печатает текст в консоли. Принимает произвольное число аргументов, производного типа, если объект не строка, то у него вызывается метод

__str__

.

a = 25
print("тест: ", a , " - ", 3.158)

#тест:  25  -  3.158
#

Дополнительные аргументы: sep — разделитель, по умолчанию пробел, end — конец строки, по умолчанию \n.

a = 25
print("тест: ", a , " - ", 3.158, sep=";", end="\nконец.\n")

#тест: ;25; - ;3.158
#конец.
#

input — запрашивает ввод пользователя, до нажатия Enter.

x = input('Введите x:')

Эта функция всегда возвращает str, если нужно значение другого типа, нужно выполнить явное приведение:

x = float(input('Введите x:'))