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
        
    
2 - Пример создания генератора
        
        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
        
    
2 - Пример использования выражения генератора
        
            # 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']