Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
base:syntax [2022/08/10 23:21]
root
— (текущий)
Строка 1: Строка 1:
-<div slide> 
-====== Основы синтаксиса ====== 
  
-Типы данных в Python, которые мы будем рассматривать в начале курса, можно организовать так: 
- 
-  * Типы 
-    * Базовые неизменяемые 
-      * Числовые 
-        * Целые (''int'') 
-        * Действительные (''float'') 
-        * Комплексные (''complex'') 
-        * Логические (''bool'') 
-      * Перечислимые 
-        * Строки (''str'') 
-        * Байтовые строки (''bytes'') 
-      * ''NoneType'' 
-    * Базовые изменяемые 
-      * Перечислимые 
-        * Списки (''list'') 
-        * Словари (''dict'') 
-        * Наборы (''set'') 
- 
-</div> 
-<div slide> 
-===== Некоторые базовые типы данных ===== 
- 
-^ Тип ^ Описание ^ Примечание ^ Пример ^ 
-| ''int''  | Целое число | Длина не ограничена (при выходе за пределы машинного long int включается "длинная" арифметика) | ''42'' | 
-| ''float''  | Число с плавающей запятой | Машинный ''double'' точнее в ''sys.float_info'' | ''3.14159'' | 
-| ''str''  | Строка | Массив символов в определенной кодировке (по умолчанию utf8). Типа "символ" нет, символ — это строка из одного символа | <code>"привет"</code> | 
-| ''bytes''  | Байтовая строка | Массив байтов. Типа "байт" нет, байт — это байтовая строка из одного символа | <code>b"\x23\x14\x00"</code> | 
-| ''bool''  | Логический тип | Значения ''True'' и ''False'' | ''True'' | 
-| ''NoneType''  | Пустой объект | Единственное значение ''None''| ''None'' | 
- 
-Все эти типы являются неизменяемыми (immutable). С точки зрения памяти новая переменная создается при каждом присваивании. 
- 
-</div> 
-<div slide> 
- 
-===== Присвоение значений и динамическая типизация ===== 
- 
-Python — язык со строгой динамической типизацией. 
- 
-Переменные объявляются в момент присвоения значения, а тип переменной определяется по правой части выражения. 
- 
-<sxh python> 
-# Комментарий:  
-a = 5 # int 
-b = 5.5 # float 
-c = "привет" # str 
-d = b"\x00\x7f\x2e" #bytes 
-e = True # bool 
-f = None # NoneType 
-</sxh> 
- 
-При повторном присваивании типы не проверяются, а создается новая переменная с тем-же именем. 
- 
-<sxh python> 
-d = 42 # Успешно: d теперь имеет тип int и значение 42 
-</sxh> 
- 
-При выполнении прочих операций типы проверяются 
- 
-<sxh python> 
-d = a + c # Ошибка: нельзя выполнить + для типов int и str 
-</sxh> 
- 
-Можно смешивать переменные разных **числовых** типов в одном выражении 
-<sxh python> 
-d = a + b # Успешно: d теперь имеет тип float и значение 27.5 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-===== Строки ====== 
- 
-<sxh python> 
-s = "привет '!' " 
-s = 'привет "!" ' 
-s = '''привет 
-я длинная строка''' 
-s = 'Строка \nс экранированием\n' 
-s = r'Строка без \n экранирования' 
-s = b'Byte String - Only Ascii and \x24' 
-</sxh> 
- 
-===== Распространенные непечатные символы ====== 
- 
-^ Символ ^ Значение ^ 
-| ''\n'' | Новая строка | 
-| ''\t'' | Табуляция | 
-| ''\r'' | Возврат каретки | 
-| ''\u????'' | Символ Unicode: ''????'' — код символа (для строк) | 
-| ''\x??'' | Байт ''??'' —  код байта (для байтовых строк) | 
-| ''\\'' | Символ ''\'' | 
- 
-Проблемы с экранированием возникают при работе с регулярными выражениями и именами папок в Windows: 
- 
-<sxh python> 
-pth = 'C:\new_files\ret_id' # Ошибка \n и \r недопустимы в имени папки 
-pth = 'C:\\new_files\\ret_id' # Все хорошо 
-pth = r'C:\new_files\ret_id' # Все хорошо 
-pth = 'C:\files\ ' # Ошибка экранированный символ \' в конце строки \' 
-pth = 'C:\files'  # Все хорошо 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-===== Функций, операторы, модули =====  
- 
-==== Функции ==== 
- 
-Функции вызываются стандартно: 
- 
-<sxh python> 
-print("Привет!") 
-</sxh> 
- 
-Могут принимать: 
- 
-<sxh python> 
-# Аргументы по порядку 
-foo(1, 2, "test") 
-</sxh> 
- 
-<sxh python> 
-# Аргументы по имени 
-bar(arg = 2, namedarg = "hello") 
-</sxh> 
- 
-Способы передачи аргументов можно смешивать, но аргументы по порядку должны идти в начале 
- 
-<sxh python> 
-bar(1, 2, arg = 2, namedarg = "hello") # Правильно 
-bar(arg = 2, namedarg = "hello", 1, 2) # Ошибка 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-Функция может возвращать одно или несколько значений. Если функция не вернула ни одного значения, то считается, что она вернула ''None''. Если возвращаемое значение не было присвоено переменной, то оно теряется. 
- 
-<sxh python> 
-loo(24) 
-</sxh> 
- 
-<sxh python> 
-x = foo(24) 
-</sxh> 
- 
-<sxh python> 
-x,y,t = bar(42) 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-Функция в Python — переменная специального типа ''function''. Объявление функции можно рассматривать как объявление одноименной переменной: 
- 
-<sxh 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 
- 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-==== Некоторые встроенные функции ==== 
- 
-^ Функция ^ Назначение ^ 
-^ ''len(x)'' | Длина перечисляемого ''x'', например строки, возвращает ''int'' | 
-^ ''abs(x)'' | Абсолютное значение числа ''x'' | 
-^ ''type(x)'' | Тип данных ''x'', возвращает специальный объект — тип | 
-^ ''print(x)'' | Печать на экран ''x'', возвращает ''None'' | 
-^ ''id(x)'' | Возвращает уникальный идентификатор объекта  | 
- 
-</div> 
-<div slide> 
- 
-==== Операторы ==== 
- 
-Об операторах надо думать, как об упрощенной форме записи вызовов функций: 
- 
-<sxh python> 
-y = 1+2*3 # тоже, что и y = __add__(1,__mult__(2,3)) 
-</sxh> 
- 
-Операторы и вызовы функций можно свободно смешивать: 
- 
-<sxh python> 
-y = 2*len(x)+1 
-</sxh> 
- 
-Многие операторы имеют сокращенную форму записи: 
- 
-<sxh python> 
-y = y + 1 
-y += 1 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-=== Арифметические операторы === 
- 
-^ Оператор ^ Тип данных ^ Действие ^ Пример ^ 
-^ <code>+</code> | <code>bool, int, float</code> | Сложение | <code>2+5</code> | 
-^ <code>+</code> | <code>str, bytes, list</code> | Конкатенация  | <code>"a"+"b"</code> | 
-^ <code>-</code> | <code>bool, int, float</code> | Вычитание | <code>2-5</code> | 
-^ <code>*</code> | <code>bool, int, float</code> | Умножение  | <code>2*5</code> | 
-^ <code>*</code> | <code>str, bytes, list * int</code> | Повторение | <code>"a"*2</code> | 
-^ <code>**</code> | <code>bool, int, float</code> | Возведение в степень | <code>2**5</code> | 
-^ <code>/</code> | <code>bool, int, float</code> | Действительное деление **тип результата всегда ''float''** | <code>2/5</code> | 
-^ <code>//</code> | <code>bool, int, float</code> | Целочисленное деление |<code>2//5</code> | 
-^ <code>%</code> | <code>bool, int, float</code> | Остаток от деления  | <code>2%5</code> | 
-^ <code>%</code> | <code>str, bytes</code> | Операция **подстановки** для ''str'' | <code>"hello %s" % "world"</code> | 
- 
-Python позволяет смешивать переменные разных **числовых** типов в одном выражении, при этом тип результата определяется наиболее содержательным типом. 
- 
-</div> 
-<div slide> 
- 
-=== Некоторые логические операторы === 
- 
-Логические операторы возвращают значения типа ''bool'' и используются, в основном, в качестве различных условий. 
- 
-^ Оператор ^ Действие ^ Пример ^ 
-^ <code>not</code> | Логическое НЕ для ''bool''| <code>not x</code> | 
-^ <code>and</code> | Логическое И для ''bool'' | <code>x and y</code> | 
-^ <code>or</code> | Логическое ИЛИ для ''bool'' | <code>x or y</code> | 
-^ <code>!=, >, <, >=, <=</code>  | Неравенство, возвращает ''bool'' | <code>x >= y</code> | 
-^ <code>==</code> | Равенство, возвращает ''bool''  |  <code>x == y</code> | 
-^ <code>is</code> | Тождество, возвращает ''bool''  |  <code>x is y</code> | 
- 
-</div> 
-<div slide> 
- 
-=== Операторы над составными типами === 
- 
-^ Оператор ^ Действие ^ Пример ^ 
-^ <code>in, not in</code> | Содержание, возвращает ''bool'' | <code>x in data</code> | 
-^ <code>[x]</code> | Индексирование переменных перечислимых типов | <code>data[x]</code> | 
-^ <code>.</code> | Обращение к полю или методу объекта или модуля | <code>data.x, data.foo(2)</code> | 
- 
-Подробнее: [[https://docs.python.org/3/reference/expressions.html]] 
- 
-</div> 
-<div slide> 
- 
-==== Модули ==== 
- 
-  * Почти все функции как стандартной библиотеки, так и и сторонних организованы в модули 
-  * Для подключения модулей используется ключевое слово ''import'' 
-  * Для доступа к методам используется оператор ''.'' 
- 
-<sxh python> 
-import math 
-math.cos(3) # Успешно: вызван метод ''cos'' модуля ''math'' 
-cos(3) # Ошибка: метода ''cos'' неизвестен 
-</sxh> 
- 
-<sxh python> 
-from math import cos 
-cos(3) # Успешно: вызван метод ''cos'' модуля ''math'' 
-</sxh> 
- 
-<sxh python> 
-import math as m 
-m.cos(3) # Успешно: вызван метод ''cos'' модуля ''math'' 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-==== Собственные модули ==== 
- 
-Аналогично происходит импорт из одного файла в другой: если я хочу вызвать метод ''foo'' из файла ''myfuncs.py'', то мне следует воспользоваться одним из следующих вариантов: 
- 
-<sxh python> 
-import myfuncs 
-myfuncs.foo() 
-</sxh> 
- 
-<sxh python> 
-from myfuncs import foo 
-foo() 
-</sxh> 
- 
-Специальной командой ''from myfuncs import * '' можно импортировать все доступные методы из модуля, но это считается плохим стилем. 
- 
-</div> 
-<div slide> 
- 
-===== Приведение типов ===== 
- 
-Типы автоматически не приводятся. Но типы ''int'', ''float'' и ''bool'' можно смешивать в арифметических выражениях. Результат будет определяться наиболее ёмким типом (''float'' > ''int'' > ''bool''). 
- 
-^  ^  Исходный тип — переменная ''x''  ^^^^^ 
-^ Целевой тип ^ ''int'' ^ ''float'' ^ ''str'' ^ ''bytes'' ^ ''bool'' ^ 
-^ ''int'' | ''='' | ''round(x)'', ''math.ceil(x)'', ''math.trunc(x)'' | ''int(x)'' | ''struct.unpack(fmt,x)'' | ''int(x)'' 
-^ ''float'' | ''float(x)'' | ''='' | ''float(x)'' | ''struct.unpack(fmt,x)'' | ''float(x)'' 
-^ ''str'' | ''str(x)'' | ''str(x)'' | ''='' | ''x.decode(encoding)'' | ''str(x)'' 
-^ ''bytes'' | ''struct.pack(fmt,x)'' | ''struct.pack(fmt,x)'' | ''x.encode(encoding)'' | ''='' | ''struct.pack(fmt, x)'' 
-^ ''bool'' | ''bool(x)'' | ''bool(x)'' | ''bool(x)'' | ''bool(x)'' | ''='' 
- 
-Используются модули ''math'' и ''struct''. 
- 
-</div> 
-<div slide> 
- 
-===== Функции print, input =====  
- 
-Важные глобальные функции для работы в консоли: 
- 
-''print()'' — печатает текст в консоли. Принимает произвольное число аргументов, производного типа, если аргумент не строка, то у него вызывается метод ''%%__str__()%%'', а при отсутствии потом ''%%__repr__()%%'' (есть у всех переменных всех типов). Таким образом ''print'' так или иначе выведет на печать переменную любого типа. 
- 
-<sxh python> 
-a = 25 
-print("тест:", a , "-", 3.158) 
-</sxh> 
-<code> 
-#тест: 25 - 3.158 
-# 
-</code> 
- 
-Дополнительные аргументы: ''sep'' — разделитель, по умолчанию пробел, ''end'' — конец строки, по умолчанию ''\n''. 
- 
-<sxh python> 
-a = 25 
-print("тест:", a , "-", 3.158, sep=";", end="\nконец.\n") 
-</sxh> 
-<code> 
-#тест:;25;-;3.158 
-#конец. 
-# 
-</code> 
- 
-''input'' — запрашивает ввод пользователя, до нажатия Enter. 
- 
-<sxh python> 
-x = input('Введите x:') 
-</sxh> 
- 
-Эта функция всегда возвращает ''str'', если нужно значение другого типа, нужно выполнить явное приведение: 
- 
-<sxh python> 
-x = float(input('Введите x:')) 
-</sxh> 
- 
-</div>