====== Функций, операторы, модули ====== ==== Функции ==== Функции вызываются стандартно: 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 — переменная специального типа ''function''. Объявление функции можно рассматривать как объявление одноименной переменной: 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'' | ^ ''id(x)'' | Возвращает уникальный идентификатор объекта |
==== Операторы ==== Об операторах надо думать, как об упрощенной форме записи вызовов функций: y = 1+2*3 # тоже, что и y = __add__(1,__mult__(2,3)) Операторы и вызовы функций можно свободно смешивать: y = 2*len(x)+1 Многие операторы имеют сокращенную форму записи: y = y + 1 y += 1
=== Арифметические операторы === ^ Оператор ^ Тип данных ^ Действие ^ Пример ^ ^ + | bool, int, float | Сложение | 2+5 | ^ + | str, bytes, list | Конкатенация | "a"+"b" | ^ - | bool, int, float | Вычитание | 2-5 | ^ * | bool, int, float | Умножение | 2*5 | ^ * | str, bytes, list * int | Повторение | "a"*2 | ^ ** | bool, int, float | Возведение в степень | 2**5 | ^ / | bool, int, float | Действительное деление **тип результата всегда ''float''** | 2/5 | ^ // | bool, int, float | Целочисленное деление |2//5 | ^ % | bool, int, float | Остаток от деления | 2%5 | ^ % | str, bytes | Операция **подстановки** для ''str'' | "hello %s" % "world" | Python позволяет смешивать переменные разных **числовых** типов в одном выражении, при этом тип результата определяется наиболее содержательным типом.
=== Некоторые логические операторы === Логические операторы возвращают значения типа ''bool'' и используются, в основном, в качестве различных условий. ^ Оператор ^ Действие ^ Пример ^ ^ not | Логическое НЕ для ''bool'', возвращает ''bool''| not x | ^ and | Логическое И для ''bool'', возвращает ''bool'' | x and y | ^ or | Логическое ИЛИ для ''bool'', возвращает ''bool'' | x or y | ^ !=, >, <, >=, <= | Неравенство, возвращает ''bool'', возвращает ''bool'' | x >= y | ^ == | Равенство, возвращает ''bool'' | x == y | ^ is | Тождество, возвращает ''bool'' | x is y | ^ ~ | Побитовое НЕ для ''int'', возвращает ''int'' | ~ x | ^ & |Побитовое И для ''int'', возвращает ''int'' | x & y | ^ | | Побитовое ИЛИ для ''int'', возвращает ''int'' | x | y |
=== Операторы над составными типами === ^ Оператор ^ Действие ^ Пример ^ ^ in, not in | Содержание, возвращает ''bool'' | x in data | ^ [x] | Индексирование переменных перечислимых типов | data[x] | ^ . | Обращение к полю или методу объекта или модуля | data.x, data.foo(2) | Подробнее: [[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'' ^^^^^ ^ Целевой тип ^ ''bool'' ^ ''int'' ^ ''float'' ^ ''str'' ^ ''bytes'' ^ ^ ''bool'' | | ''bool(x)'' | ''bool(x)'' | ''bool(x)'' | ''bool(x)'' | ^ ''int'' | ''int(x)'' | | ''round(x)'', ''math.ceil(x)'', ''math.trunc(x)'' | ''int(x)'' | ''struct.unpack(fmt,x)'' | ^ ''float'' | ''float(x)'' | ''float(x)'' | | ''float(x)'' | ''struct.unpack(fmt,x)'' | ^ ''str'' | ''str(x)'' | ''str(x)'' | ''str(x)'' | | ''x.decode(encoding)'' | ^ ''bytes'' | ''x.to_bytes(length, order), struct.pack(fmt, x)'' | ''x.to_bytes(length, order), struct.pack(fmt,x)'' | ''struct.pack(fmt,x)'' | ''x.encode(encoding)'' | | Используются модули ''math'' и ''struct''.
===== Функция print ===== ''print()'' — печатает текст в консоли. Принимает произвольное число аргументов, производного типа, если аргумент не строка, то у него вызывается метод ''%%__str__()%%'', а при отсутствии потом ''%%__repr__()%%'' (есть у всех переменных всех типов). Таким образом ''print'' так или иначе выведет на печать переменную любого типа. 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 конец.