1)Области видимости
Пример области видимости функций и переменных:
def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)
scope_test()
print("In global scope:", spam)
#The output of the example code is:
"""
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
"""
В данном примере:
- local assignment - не изменяет переменную spam в области видимости метода scope_test
- nonlocal assignment - изменяет переменную spam в области видимости метода scope_test
- global assignment - изменяет переменную spam в области видимости модуля
2)Определение классы
Пример формы задания класса:
class ClassName:
#statement-1
#.
#.
#.
#statement-N
2.2)Объект класса
Пример создания класса и инициализации объекта:
class Complex:
"""A simple example class"""
i = 12345
#метод, вызываемый при инициализации класса
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
def f(self):
return 'hello world'
x = Complex(3.0, -4.5)
x.r, x.i
2.2)Переменные класса и переменные объекта
Переменные класса общие для всех последующих объектов, образованных их этого класса вдальнейшем:
class Dog:
# переменная класса, распространяется на все объекты
kind = 'canine'
def __init__(self, name):
# переменная объекта, уникальна для каждого объекта
self.name = name
# >>> d = Dog('Fido')
# >>> e = Dog('Buddy')
# >>> d.kind # shared by all dogs
# 'canine'
# >>> e.kind # shared by all dogs
# 'canine'
# >>> d.name # unique to d
# 'Fido'
# >>> e.name # unique to e
# 'Buddy'
3)Итераторы и генераторы
1 - Пример класса итератора
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
#пример использования
# >>> rev = Reverse('spam')
# >>> iter(rev)
# <__main__.Reverse object at 0x00A1DB50>
# >>> for char in rev:
# ... print(char)
# ...
# m
# a
# p
# s
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
#пример использования
# >>> for char in reverse('golf'):
# ... print(char)
# ...
# f
# l
# o
# g
# sum of squares
sum(i*i for i in range(10))
# 285
xvec = [10, 20, 30]
yvec = [7, 5, 3]
# dot product
sum(x*y for x,y in zip(xvec, yvec))
# 260
from math import pi, sin
sine_table = {x: sin(x*pi/180) for x in range(0, 91)}
unique_words = set(word for line in page for word in line.split())
valedictorian = max((student.gpa, student.name) for student in graduates)
data = 'golf'
list(data[i] for i in range(len(data)-1, -1, -1))
# ['f', 'l', 'o', 'g']