Отступы в языке являются важной часть синтаксиса. Все инструкции в пределах одного блока должны иметь равные отступы от левого края.
Переменная - это ссылка на объект определенного типа.
Присваивание
a = 4 // базовое присваивание
a, b, c, d = "next" // присваивание последовательности (a="n", b="e" и т.д.)
a, b, *c = "string" // (a="s", b="t", c = ['r','i','n','g'])
*a, b, c = "string" // (a=['s','t','r','i'], b="n", c="g")
a = b = c = 4 // групповое присваивание
a, b, c = 4
Условная инструкция if
if one:
smth1
elif two:
smth2
else:
smth3
краткая форма
A=Y if X else Z
Инструкция while
while one:
smth1
if two: break // выйти из цикла
if three: continue // к началу цикла
else:
smth2
Инструкция for
for x in object:
smth1
if two: break // выйти из цикла
if three: continue // к началу цикла
else:
smth2
примеры со множественным присваиванием
for (a, b, c) in [(1, 2, 3), (4, 5, 6)]: ...
for (a, *b, c) in [(1, 2, 3, 4), (5, 6, 7, 8)]: ...
Функции range, zip, enumerate, map
list(range(4)) // [0,1,2,3]
list(range(0, 10, 2)) // [0,2,4,6,8] с шагом 2
zip - возвращает список кортежей, составленный из нескольких последовательностей
L1 = [1, 2, 3, 4]
L2 = [5, 6, 7, 8]
L3 = list(zip(L1, L2)) // [(1, 5), (2, 6), (3, 7), (4, 8)]
enumerate - возвращает кортеж (index, value) для каждого элемента списка
L = [1,2,3,4]
for (x,y) in enumerate(L):
print ('index:',x, ' value:',y)
map - применяет функцию к каждому элементу последовательности
L = [6,7,8,9]
L2 = list(map((lambda x: x*20),L))
Генераторы списков
L = [1,2,3,4]
L2 = [4,3,2,1]
print ([x+2 for x in L]) # [2,4,5,6]
print ([x+2 for x in L if x%2]) # [3,5]
print ([x+y for x in L for y in L2])
print ([x+y for x in L for y in L2 if L.index(x)==L2.index(y)]) # [5,5,5,5]
Функции
def name (arg1, arg2, ..., argN):
smth
return value
области видимости
Если необходимо изменить(переопределить) глобальную или локальную в объемлющей функции переменную нужно явно указать в функции перед переменной global или nonlocal. Для чтения переменной никакие указания не нужны.
b = 5 # глобальная для всех
def env (a):
c = a + b # a, c - локальные переменные для этой функции
return print (a+b) # здесь чтение переменной b
b = 5
def env ():
global b
b = 10 # переопределяем глобальную переменную
return
env()
print (b) # b будет равно 10 (вызов функции обязателен)
def one():
a = 10
def two():
nonlocal a
a = 20 # изменение локальной переменной объемлющей функции
Идеал - это не использовать глобальных переменных внутри функций!
аргументы функции
def func (a,b,c): ...
def func (a=4, b=5, c=10): ... # именованные аргументы, значения по умолчанию!
return a+b+c
func(1,2,3) # сумма значений аргументов - 6
func() # 19
func(a=1, c=3) # 9
def func (*args): ... # произвольное кол-во аргументов (на выходе будет кортеж)
В вызове функции можно передавать любой итерируемый объект.
пр.
L = [45,34,21,10]
def func(*args):
return print(args)
func(L)
на выходе ([45, 34, 21, 10],)
!если func(*L) то на выходе (45,34,21,10)
def func (**kargs): ... # произвольное кол-во именованных аргументов (на выходе словарь)
func (a=1, b=5, c=7)
def func (a, b=5, *args, **kargs): ... # последовательность аргументов
Функция lambda
lambda arg1, arg2, ..., argN : выражение используещее аргументы
f = lambda x, y : x*y
f(5,2) # 10
f = lambda x, y : x if x > y else y
Итераторы, функции-генераторы, выражения генераторы
Итератор - объект(класс) с методами __iter__ и __next__
Доступ к итератору объекта можно получить с помощью функции iter()
s = 'something'
it = iter(s)
...
Итерируемые объекты определяют метод __next__
Функции-генераторы и выражения-генераторы - инструменты, позволяющие реализовать воспроизведение результатов по требованию за счет реализации протокола итераций.
Выражения-генераторы
...
(x for x in Seq)
...
возвращают объект-генератор, который поддерживает протокол итерации
Функции-генераторы
Генерируют последовательность значений с течением времени. Автоматически поддерживают протокол итераций. Возвращают объект-генератор! Объект-генератор имеет метод __next__.
...
def gr(st):
for x in st:
yield x*2
G = gr("string") # G - объект-генератор
Метод __next__ генератора возобновляет каждый раз выполнение функции.
Генераторы являются итераторами однократного применения! Чтобы выполнить повторный обход результатов, придется создать новый генератор.
Исключения
try:
...
raise name() # вызываем исключение вручную (если необходимо)
name - экземпляр класса исключения
except: # обрабатываем все исключения
...
except E1: # обрабатываем исключение E1
...
except (E2, E3, E4): # обрабатываем несколько исключений
...
except E5 as name: # перехватываем исключение и получаем экземпляр
...
else: # выполняется если в блоке try не возникло исключение
...
finally: # выполнит в любом случаем, было исключение или нет
...
Переменная - это ссылка на объект определенного типа.
Присваивание
a = 4 // базовое присваивание
a, b, c, d = "next" // присваивание последовательности (a="n", b="e" и т.д.)
a, b, *c = "string" // (a="s", b="t", c = ['r','i','n','g'])
*a, b, c = "string" // (a=['s','t','r','i'], b="n", c="g")
a = b = c = 4 // групповое присваивание
a, b, c = 4
Условная инструкция if
if one:
smth1
elif two:
smth2
else:
smth3
краткая форма
A=Y if X else Z
Инструкция while
while one:
smth1
if two: break // выйти из цикла
if three: continue // к началу цикла
else:
smth2
Инструкция for
for x in object:
smth1
if two: break // выйти из цикла
if three: continue // к началу цикла
else:
smth2
примеры со множественным присваиванием
for (a, b, c) in [(1, 2, 3), (4, 5, 6)]: ...
for (a, *b, c) in [(1, 2, 3, 4), (5, 6, 7, 8)]: ...
Функции range, zip, enumerate, map
list(range(4)) // [0,1,2,3]
list(range(0, 10, 2)) // [0,2,4,6,8] с шагом 2
zip - возвращает список кортежей, составленный из нескольких последовательностей
L1 = [1, 2, 3, 4]
L2 = [5, 6, 7, 8]
L3 = list(zip(L1, L2)) // [(1, 5), (2, 6), (3, 7), (4, 8)]
enumerate - возвращает кортеж (index, value) для каждого элемента списка
L = [1,2,3,4]
for (x,y) in enumerate(L):
print ('index:',x, ' value:',y)
map - применяет функцию к каждому элементу последовательности
L = [6,7,8,9]
L2 = list(map((lambda x: x*20),L))
Генераторы списков
L = [1,2,3,4]
L2 = [4,3,2,1]
print ([x+2 for x in L]) # [2,4,5,6]
print ([x+2 for x in L if x%2]) # [3,5]
print ([x+y for x in L for y in L2])
print ([x+y for x in L for y in L2 if L.index(x)==L2.index(y)]) # [5,5,5,5]
Функции
def name (arg1, arg2, ..., argN):
smth
return value
области видимости
Если необходимо изменить(переопределить) глобальную или локальную в объемлющей функции переменную нужно явно указать в функции перед переменной global или nonlocal. Для чтения переменной никакие указания не нужны.
b = 5 # глобальная для всех
def env (a):
c = a + b # a, c - локальные переменные для этой функции
return print (a+b) # здесь чтение переменной b
b = 5
def env ():
global b
b = 10 # переопределяем глобальную переменную
return
env()
print (b) # b будет равно 10 (вызов функции обязателен)
def one():
a = 10
def two():
nonlocal a
a = 20 # изменение локальной переменной объемлющей функции
Идеал - это не использовать глобальных переменных внутри функций!
аргументы функции
def func (a,b,c): ...
def func (a=4, b=5, c=10): ... # именованные аргументы, значения по умолчанию!
return a+b+c
func(1,2,3) # сумма значений аргументов - 6
func() # 19
func(a=1, c=3) # 9
def func (*args): ... # произвольное кол-во аргументов (на выходе будет кортеж)
В вызове функции можно передавать любой итерируемый объект.
пр.
L = [45,34,21,10]
def func(*args):
return print(args)
func(L)
на выходе ([45, 34, 21, 10],)
!если func(*L) то на выходе (45,34,21,10)
def func (**kargs): ... # произвольное кол-во именованных аргументов (на выходе словарь)
func (a=1, b=5, c=7)
def func (a, b=5, *args, **kargs): ... # последовательность аргументов
Функция lambda
lambda arg1, arg2, ..., argN : выражение используещее аргументы
f = lambda x, y : x*y
f(5,2) # 10
f = lambda x, y : x if x > y else y
Итераторы, функции-генераторы, выражения генераторы
Итератор - объект(класс) с методами __iter__ и __next__
Доступ к итератору объекта можно получить с помощью функции iter()
s = 'something'
it = iter(s)
...
Итерируемые объекты определяют метод __next__
Функции-генераторы и выражения-генераторы - инструменты, позволяющие реализовать воспроизведение результатов по требованию за счет реализации протокола итераций.
Выражения-генераторы
...
(x for x in Seq)
...
возвращают объект-генератор, который поддерживает протокол итерации
Функции-генераторы
Генерируют последовательность значений с течением времени. Автоматически поддерживают протокол итераций. Возвращают объект-генератор! Объект-генератор имеет метод __next__.
...
def gr(st):
for x in st:
yield x*2
G = gr("string") # G - объект-генератор
Метод __next__ генератора возобновляет каждый раз выполнение функции.
Генераторы являются итераторами однократного применения! Чтобы выполнить повторный обход результатов, придется создать новый генератор.
Исключения
try:
...
raise name() # вызываем исключение вручную (если необходимо)
name - экземпляр класса исключения
except: # обрабатываем все исключения
...
except E1: # обрабатываем исключение E1
...
except (E2, E3, E4): # обрабатываем несколько исключений
...
except E5 as name: # перехватываем исключение и получаем экземпляр
...
else: # выполняется если в блоке try не возникло исключение
...
finally: # выполнит в любом случаем, было исключение или нет
...
Комментариев нет:
Отправить комментарий