- Где взять: https://www.python.org/
- Документация: https://docs.python.org/3/
- PEP: https://www.python.org/dev/peps/
Еловских Михаил, [email protected]
#!/usr/bin/env python
import random
def roll_dice(min, max):
"""
Функция, имитирующая бросок кубика. Возвращает
случайное число на одной из его сторон.
"""
value = random.randint(min, max)
return value
if __name__ == '__main__':
min, max = 1, 6
# Бросим кубик 10 раз и выведем результат
for i in range(10):
value = roll_dice(min, max)
print(value)
-
Блоки выделяются отступами (принято 4 пробела)
def a(): for i in range(10): print(i)
-
Динамически типизированный
a = 1 b = 2
-
Регистро зависимый (
var != Var
)
a = "Привет"
b = 'Мир'
c = """
Привет
Мир
"""
d = '''
Привет
Мир
'''
- Начинаются на
a-zA-Z_
- Могут содержать
a-zA-Z0-9_
- Чувствительны к регистру
- Имена классов
CamelCase
- Имена аттрибутов и функций -
snake_case
_my_attribute
- "приватный" аттрибут__my_attribute
- очень "приватный" аттрибут
- Числа:
float()
иint()
(иlong()
) - Коллекции:
list()
,tuple()
,dict()
,set()
- Строки:
str()
a = 1
if a > 1:
print("a > 1")
elif a < 1:
print("a < 1")
else:
print("a == 1")
Однострочники:
a = 'Четное' if i % 2 = 0 else 'Нечетное'
numbers = [1, 2, 3, 4, 5]
for number in numbers:
print(number)
numbers = range(10)
while numbers:
print(numbers.pop())
break
- прервать циклcontinue
- следующая итерацияelse
- если цикл не был прерван
def is_spammer(messages):
# messages = ['Привет', 'Как дела?', ...]
# Проверим, спам-фильтром
for message in messages:
if is_spam(message):
return True
else:
return False
Полезности:
enumerate(iterable)
- возвращаетi, value
range()
- возвращает итератор значенийitertools
- модуль для работы с итераторами
my_list = []
for i in range(5):
if i % 2 == 0:
my_list.append(i + 1)
my_list = [i + 1 for i in range(5) if i % 2 == 0]
Словари и множества:
my_dict = {i: i for i in range(10)}
my_set = {i for i in range(10)}
- Наследуются от базового
Exception
- Существуют отдельные
KeyboardInterrupt
иSyntaxError
- Выбрасываются
raise MyException
- Список встроенных исключений.
Обработка:
try:
1 / 0
except ZeroDivisionError as exception:
# Если был ZeroDivisionError
except ValueError:
# Если был ValueError
except:
# Если было любое другое исключение
print("Unhandled error")
raise
else:
# Не было исключений
finally:
# Выполнится в любом случае
try:
file = open('file.txt')
# работаем с файлом
finally:
file.close()
with open('file.txt') as file:
# работаем с файлом
- Работа с файлами
- Взятие локов
- Изменение окружения
def my_function(param1, param2=123, *args, **kwargs):
print(param1, param2, args, kwargs)
param1
- обязатетльный параметрparam2
- опциональный параметрargs
,kwargs
- доп. параметры
my_function(12, 123, 1234, 12345)
my_function(param2=12, param1=123,
param3=1234, param4=12345)
Функция - first class object.
def add(a, b):
return a + b
def caller(func, *args):
return func(*args)
another_add = add
caller(another_add, 1, 2)
a = lambda x, y: x + y
def my_decorator(func):
def wrapper():
print("Before func() is called")
func()
print("After func() is called")
return wrapper
def my_function():
print("Hello world!")
my_function = my_decorator(my_function)
my_function()
def my_decorator(func):
def wrapper():
print("Before func() is called")
func()
print("After func() is called")
return wrapper
@my_decorator
def my_function():
print("Hello world!")
- Тайминг
- Логгирование
- Добавление логики
- Регистрация handler-ов
class MyClass():
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
instance = MyClass(1, 2)
instance.add()
- Множественное наследование
- Миксины
type(instance)
- получить класс инстансаisinstance()
,issubclass()
- работа с наследованием__method__
- магические методы
iterator = iter(obj)`
next(iterator)
next(iterator)
- Класс реализует метод
__iter__
- Итератор реализует метод
__next__
- По окончании возвращает
StopIteration
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]