Функций, операторы, модули
Функции
Функции вызываются стандартно:
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 конец.