Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
base:syntax [2022/08/10 23:34] root |
— (текущий) |
<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'', возвращает ''bool''| <code>not x</code> | | |
^ <code>and</code> | Логическое И для ''bool'', возвращает ''bool'' | <code>x and y</code> | | |
^ <code>or</code> | Логическое ИЛИ для ''bool'', возвращает ''bool'' | <code>x or y</code> | | |
^ <code>!=, >, <, >=, <=</code> | Неравенство, возвращает ''bool'', возвращает ''bool'' | <code>x >= y</code> | | |
^ <code>==</code> | Равенство, возвращает ''bool'' | <code>x == y</code> | | |
^ <code>is</code> | Тождество, возвращает ''bool'' | <code>x is y</code> | | |
^ <code>~</code> | Логическое НЕ для ''int'', возвращает ''int'' | <code>~ x</code> | | |
^ <code>&</code> | Логическое И для ''int'', возвращает ''int'' | <code>x & y</code> | | |
^ <code>|</code> | Логическое ИЛИ для ''int'', возвращает ''int'' | <code>x | 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'' ^^^^^ | |
^ Целевой тип ^ ''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'' | ''struct.pack(fmt, x)'' | ''struct.pack(fmt,x)'' | ''struct.pack(fmt,x)'' | ''x.encode(encoding)'' | ''='' | | |
| |
| |
Используются модули ''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> | |