Основы Python: синтаксис
Концепции - переменные, условия, циклы, функции - вы уже знаете
Здесь только то, как это
выглядит именно в Python, и что в нём непривычно по сравнению с языками, на которых писали раньше
Теория
Переменные и типы
Тип не объявляется - определяется значением, и может смениться при переприсваивании:
name = 'Аня' # str
age = 20 # int
height = 172.5 # float
is_student = True # bool
nothing = None # аналог null
x = 5
x = 'пять' # валидно - тип переменной не зафиксирован
Приведение типов - явное преобразование через int(), str(), float(), bool():
int('42') # 42
str(5) # '5'
float('3.14') # 3.14
Truthiness
0, '', None и пустые коллекции ([], {}) считаются ложными в условиях, всё остальное - истинным:
bool(0), bool(''), bool(None), bool([])
# (False, False, False, False)
Операторы
+ - * / // % ** - обычная арифметика плюс // (целочисленное деление) и % (остаток):
7 / 2 # 3.5 - / всегда float
7 // 2 # 3
7 % 2 # 1
2 ** 10 # 1024
Сравнение - как обычно (== != < > <= >=)
Логика - словами, не символами: and, or, not (вместо && || !)
Вывод, ввод
print() - вывод текста в консоль
Строки шаблонизируются через - f-строки
print(f'Привет, {name}! Тебе {age} лет.')
input() - ввод текста от юзера
Можно передать т екст-приглашение
Всегда возвращает str
age = int(input('Введи возраст: '))
Условия и циклы
elif, не else if
Границы блока - отступ (4 пробела или табуляция), не скобки
if score >= 90:
grade = 'A'
elif score >= 75:
grade = 'B'
else:
grade = 'F'
for - цикл по последовательности
range генерирует последовательность чисел; обычного цикла по типу i = 0; i < n; i++ в python нет
while - цикл по условию
break/continue - как обычно
for i in range(5): # 0..4
if i == 3:
continue
print(i)
n = 3
while n > 0:
n -= 1 # нет ++/--
match/case
Аналог switch в других языках, но умеет сопоставлять не только значения, а структуру (паттерны)
Появился в Python 3.10
match command:
case 'start':
run()
case 'stop' | 'halt': # несколько вариантов в одном case
stop()
case _: # аналог default - подходит под всё
print('неизвестная команда')
Функции
Задаём через def
Без return функция вернёт None:
def greet(name, greeting='Привет'):
return f'{greeting}, {name}!'
Значение по умолчанию (greeting='Привет') задаётся один раз - в определении функции
При вызове такой параметр можно не передавать
Именованные аргументы - фича вызова, не определения: значение передаётся по имени параметра, а не по
позиции
В большинстве других языков такого нет - там аргументы позиционные
greet('Аня') # только обязательный, по позиции
greet('Боря', greeting='Хай') # name - позиционно, greeting - по имени
greet(greeting='Йо', name='Вика') # оба по имени - порядок не важен
Особенно полезно у функций с несколькими опциональными параметрами - не нужно помнить порядок и видно, что чему передаётся, прямо в вызове:
def create_user(name, age=18, is_admin=False): ...
create_user('Дима', is_admin=True) # age пропущен, is_admin - по имени, ничего не перепутано
Проверь себя
1. Как задать значение по умолчанию для параметра функции?
def f(x=10): ... - если не передать x, будет использовано 10
2. Чем / отличается от //?
/ - всегда float
// - целочисленное деление (отбрасывает дробную часть)
3. input() вернул '25'. Как получить из это го int?
int(input(...)) - input() всегда отдаёт str, преобразование нужно делать явно
4. Что определяет границы блока в Python?
Отступ (обычно 4 пробела), а не {}
Неправильный отступ - IndentationError
5. Чем case _ отличается от остальных веток в match?
Это wildcard - подходит под любое значение, аналог default в switch
Обычно ставится последней веткой
6. greet('Аня', greeting='Хай') и greet(greeting='Хай', name='Аня') - оба вызова верны?
Да
Именованные аргументы можно передавать в любом порядке - главное не перепутать имена