Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Функции
Технологии и языки программирования
Юдинцев В. В.
Кафедра теоретической механики
Самарский университет
21 октября ...
Содержание
1 Объявление функций
2 Пространство имён
3 Функциональное программирование
4 Списочные выражения и генераторы
5...
Объявление функций
Объявление функции
1 def spring_fo rc e ( f0 , fk , h , x ) :
2 i f 0 < x < h :
3 res = 0
4 else :
5 res = f0 −(f0−fk ) * ...
Позиционные аргументы
Объявление функции:
1 def spring_fo rc e ( f0 , fk , h , x ) :
2 . . .
Вызов функции:
spring_forc e ...
Именованные аргументы
Объявление функции:
1 def spring_fo rc e ( f0 , fk , h , x ) :
2 . . .
Возможна передача функции име...
Параметры по умолчанию
1 def height_max ( v0 , g = 9.81) :
2 ”’
3 Максимальная высота подъёма груза, брошенного вверх
4 с ...
Параметры по умолчанию
При использовании ссылочных типов в параметрах по
умолчанию их значение при изменении внутри функци...
Параметры по умолчанию
Исправленный вариант
1 def add_element_to_b ( a , b=None ) :
2 i f b == None :
3 b = [ ]
4 b . appe...
Переменное число аргументов
Позиционные аргументы
Упаковка позиционных аргументов в кортеж args
1 def zeros ( * args ) :
2...
Переменное число аргументов
Позиционные аргументы
1 def zeros ( n1 , * args ) :
2 i f len ( args ) == 0:
3 return [ 0 ] * ...
Переменное число аргументов
Позиционные аргументы
1 def zeros ( n1 , * args ) :
2 i f len ( args ) == 0:
3 return [ 0 ] * ...
Переменное число аргументов
Именованные аргументы
1 def zeros ( * * kwargs ) :
2 i f kwargs . get ( ’ dim1 ’ ) :
3 res = [...
Распаковка позиционных аргументов
1 def zeros ( n1 , * args ) :
2 row = [ 0 ] * n1
3 i f len ( args ) == 0:
4 return row
5...
Распаковка именованных аргументов
1 def zeros ( * * kwargs ) :
2 i f kwargs . get ( ’ dim1 ’ ) :
3 res = [ 0 ] * kwargs [ ...
Документирование функции
1 import numpy as np
2
3 def o r b i t a l _ v e l o c i t y ( height ) :
4 ”’ Скорость движения ...
Имя функции как переменная. Замыкания
1 def step_function ( x0 , y0 , y1 ) :
2 def step ( x ) :
3 i f x<x0 :
4 return y0
5...
Замыкание
Функция (внутренняя), определяемая в теле другой
(внешней) функции и создаваемая каждый раз во время
выполнения ...
Пространство имён
Локальные переменные
При каждом вызове функции создаётся новое локальное
пространство имён
1 a = 1 # Глобальная переменная...
Области видимости. Правило LEGB
При использовании имени переменной внутри функции
интерпретатор последовательно ищет соотв...
Инструкция global
1 a = 1 # Глобальная переменная модуля
2 def fun ( x ) :
3 b = 10 + a # a из глобальной области
4 a = 1 ...
Инструкция nonlocal
При необходимости изменить переменную объемлющей
области её необходимо объявить nonlocal
1 a = 1 # Гло...
Функциональное программирование
Анонимная (лямбда) функция
Короткие однострочные функции могут быть объявлены
при помощи lambda-функций
1 mean = lambda x ...
Функция filter
Применение лямбда-функции с функцией filter
1 >> data = {1 , 7 , 3 , 2 , 6 , 8}
2
3 >> f i l t e r ( lambda...
Функция filter
Применение лямбда-функции с функцией filter
data = {1 , 7 , 3 , 2 , 6 , 8}
def less_than_5 ( x ) : return x...
Функция filter
Применение лямбда-функции с функцией filter
data = {1 , 7 , 3 , 2 , 6 , 8}
def less_than_5 ( x ) : return x...
Функция map
Функция map(function, data) применяет function к
каждому элементу последовательности data:
1 data = [4 ,5 ,6 ,...
Функция map
Функцию map можно использовать для обработки нескольких
списков:
1 vec1 = [1 ,4 ,3 ,7]
2
3 vec2 = [8 ,5 ,1 ,3]...
Списочные выражения и генераторы
Списочные выражения
Вместо функции map
1 data = [10 , 12 , 13 , 14]
2
3 >> l i s t (map( lambda x : x * * 2 , data ) )
4 [...
Дополнительные условия
Выражение формирует список квадратов только чётных
элементов из range(10):
1 [ x **2 f o r х in ran...
Выражения с вложенными циклами
Списочные выражения могут содержать несколько вложенных
циклов:
1 [ x+ ’− ’ +y f o r x in (...
Функции-генераторы
При помощи ключевого слова yield создаются функции,
“лениво” генерирующие последовательности, подобно
ф...
Функции-генераторы
Функция-генератор чисел Фибоначчи
1 def f i b ( count ) :
2 n0 , n1 = 0 , 1
3 f o r i in range ( count ...
Функции-генераторы
Функция-генератор чисел Фибоначчи
1 def f i b ( count ) :
2 n0 , n1 = 0 , 1
3 f o r i in range ( count ...
Функции-генераторы
Функция-генератор чисел Фибоначчи
1 def f i b ( count ) :
2 n0 , n1 = 0 , 1
3 f o r i in range ( count ...
Функции-генераторы
Функция-генератор чисел Фибоначчи
1 def f i b ( count ) :
2 n0 , n1 = 0 , 1
3 f o r i in range ( count ...
Пример
1 text = ” Feci quod potui , f a c i a n t meliora potentes ”
Формирование множества букв предложения:
2 l e t t e ...
Пример
1 text = ” Feci quod potui , f a c i a n t meliora potentes ”
Формирование множества букв предложения:
2 l e t t e ...
Пример
1 text = ” Feci quod potui , f a c i a n t meliora potentes ”
Формирование множества букв предложения:
2 l e t t e ...
Списочные выражения и генераторы
Списочное выражение формирует сразу весь список (list):
1 res = [ ( x , text . count ( x ...
Функция zip
Функция zip(i1, i2, ...) объединяет
итераторы-аргументы и создаёт итератор по кортежам
элементов аргументов:
1...
Задание
Игра “Жизнь”
Колония клеток заданна множеством пар координат
(множество кортежей), например:
1 colony = { ( 1 , 1 ) , ( 2 ...
Игра “Жизнь”
Колония клеток заданна множеством пар координат
(множество кортежей), например:
1 colony = { ( 1 , 1 ) , ( 2 ...
Игра “Жизнь”
Колония клеток заданна множеством пар координат
(множество кортежей), например:
1 colony = { ( 1 , 1 ) , ( 2 ...
Upcoming SlideShare
Loading in …5
×

Основы Python. Функции

463 views

Published on

Основы языка Питон: функции, элементы функционального программирования, списочные выражения, генераторы. Презентация к лекции курса "Технологии и языки программирования".

Published in: Education
  • Be the first to comment

Основы Python. Функции

  1. 1. Функции Технологии и языки программирования Юдинцев В. В. Кафедра теоретической механики Самарский университет 21 октября 2016 г.
  2. 2. Содержание 1 Объявление функций 2 Пространство имён 3 Функциональное программирование 4 Списочные выражения и генераторы 5 Задание Кафедра Теоретической механики Функции 2 / 39
  3. 3. Объявление функций
  4. 4. Объявление функции 1 def spring_fo rc e ( f0 , fk , h , x ) : 2 i f 0 < x < h : 3 res = 0 4 else : 5 res = f0 −(f0−fk ) * x / h 6 return res Ключевое слово def, имя функции, список аргументов Результат возвращается при помощи оператора return Если оператор return отсутствует, то функция возвращает None spring_forc e (10 , 2 , 0.1 , 0.05) 6 Кафедра Теоретической механики Функции 4 / 39
  5. 5. Позиционные аргументы Объявление функции: 1 def spring_fo rc e ( f0 , fk , h , x ) : 2 . . . Вызов функции: spring_forc e ( 1 0 . 0 , 2.0 , 0.1 , 0.05) : Аргументы функции spring_force должны передаваться в том порядке, в котором это задумано автором функции При вызове функции необходимо помнить смысловой порядок аргументов Кафедра Теоретической механики Функции 5 / 39
  6. 6. Именованные аргументы Объявление функции: 1 def spring_fo rc e ( f0 , fk , h , x ) : 2 . . . Возможна передача функции именованных аргументов: 1 f = spring_fo rc e ( h =0.3 , f0 =10 , fk =2 ,x =0.15) Порядок аргументов может быть произвольным Такой способ вызова позволяет исключить ошибки Кафедра Теоретической механики Функции 6 / 39
  7. 7. Параметры по умолчанию 1 def height_max ( v0 , g = 9.81) : 2 ”’ 3 Максимальная высота подъёма груза, брошенного вверх 4 с начальной скоростью v0 (м/с), 5 при ускорении свободного падения g (м/с**2) 6 ”’ 7 return 0.5* v0 * * 2 / g Высота подъёма груза на Земле, g ≈ 9.81 м/с2 >> height_max (10 ) 5.098399102681758 Высота подъёма груза на Луне, g ≈ 1.62 м/с2 >> round ( height_max ( 1 0 , 1 . 6 2 ) ,1) 30.9 Кафедра Теоретической механики Функции 7 / 39
  8. 8. Параметры по умолчанию При использовании ссылочных типов в параметрах по умолчанию их значение при изменении внутри функции сохраняется и до следующего вызова этой функции: 1 def add_element_to_b ( a , b = [ ] ) : 2 b . append ( a ) 3 return b При первом вызове функции: b – пустой список add_element_to_b ( 4 ) [ 4 ] При втором вызове функции: b “вспомнит” последнее значение add_element_to_b ( 5 ) [4 , 5] Кафедра Теоретической механики Функции 8 / 39
  9. 9. Параметры по умолчанию Исправленный вариант 1 def add_element_to_b ( a , b=None ) : 2 i f b == None : 3 b = [ ] 4 b . append ( a ) 5 return b >> add_element_to_b ( 4 ) [ 4 ] >> add_element_to_b ( 5 ) [ 5 ] Кафедра Теоретической механики Функции 9 / 39
  10. 10. Переменное число аргументов Позиционные аргументы Упаковка позиционных аргументов в кортеж args 1 def zeros ( * args ) : 2 p r i n t ( ’Аргументы : ’ , args ) 3 i f len ( arg ) == 1: 4 return [ 0 ] * args [ 0 ] 5 i f len ( arg ) == 2: 6 return [ [ 0 ] * args [ 0 ] ] * args [ 1 ] Переданные аргументы будут собраны в кортеж args >> zeros ( 3 , 3 ) Аргументы: (3 , 3) [ [ 0 , 0 , 0] , [0 , 0 , 0] , [0 , 0 , 0 ] ] Кафедра Теоретической механики Функции 10 / 39
  11. 11. Переменное число аргументов Позиционные аргументы 1 def zeros ( n1 , * args ) : 2 i f len ( args ) == 0: 3 return [ 0 ] * n1 4 i f len ( args ) == 1: 5 return [ [ 0 ] * n1 ] * args [ 0 ] >> zeros ( ) TypeError : zeros ( ) missing 1 required p o s i t i o n a l argument : ’ n1 ’ Кафедра Теоретической механики Функции 11 / 39
  12. 12. Переменное число аргументов Позиционные аргументы 1 def zeros ( n1 , * args ) : 2 i f len ( args ) == 0: 3 return [ 0 ] * n1 4 i f len ( args ) == 1: 5 return [ [ 0 ] * n1 ] * args [ 0 ] >> zeros ( ) TypeError : zeros ( ) missing 1 required p o s i t i o n a l argument : ’ n1 ’ >> zeros ( 3 ) [0 , 0 , 0] Кафедра Теоретической механики Функции 11 / 39
  13. 13. Переменное число аргументов Именованные аргументы 1 def zeros ( * * kwargs ) : 2 i f kwargs . get ( ’ dim1 ’ ) : 3 res = [ 0 ] * kwargs [ ’ dim1 ’ ] 4 i f kwargs . get ( ’ dim2 ’ ) : 5 res = [ res ] * kwargs [ ’ dim2 ’ ] 6 return res Переданные аргументы будут собраны в словарь kwargs >> zeros ( dim1 =3) [0 , 0 , 0] >> zeros ( dim1=2 , dim2 =2) [ [ 0 , 0] , [0 , 0 ] ] Кафедра Теоретической механики Функции 12 / 39
  14. 14. Распаковка позиционных аргументов 1 def zeros ( n1 , * args ) : 2 row = [ 0 ] * n1 3 i f len ( args ) == 0: 4 return row 5 i f len ( args ) == 1: 6 return [ row ] * args [ 0 ] Вызвать функцию zeros можно, передав два параметра >> zeros ( 2 , 2 ) [ [ 0 , 0] , [0 , 0 ] ] или один список или кортеж из двух элементов с модификатором * >> dim = ( 2 , 2 ) >> zeros ( * dim ) [ [ 0 , 0] , [0 , 0 ] ] Кафедра Теоретической механики Функции 13 / 39
  15. 15. Распаковка именованных аргументов 1 def zeros ( * * kwargs ) : 2 i f kwargs . get ( ’ dim1 ’ ) : 3 res = [ 0 ] * kwargs [ ’ dim1 ’ ] 4 i f kwargs . get ( ’ dim2 ’ ) : 5 res = [ res ] * kwargs [ ’ dim2 ’ ] 6 return res Вызвать функцию zeros можно, передав два параметра >> zeros ( dim1=2 , dim1 =2) [ [ 0 , 0] , [0 , 0 ] ] или один словарь с модификатором ** >> dims = ( ’ dim1 ’ : 2 , ’ dim2 ’ : 2) >> zeros ( * * dims ) [ [ 0 , 0] , [0 , 0 ] ] Кафедра Теоретической механики Функции 14 / 39
  16. 16. Документирование функции 1 import numpy as np 2 3 def o r b i t a l _ v e l o c i t y ( height ) : 4 ”’ Скорость движения по круговой орбите вокруг Земли км/с 5 height - высота орбиты в км ”’ 6 Rz = 6371 7 mu = 398600.4418 8 return np . sqrt (mu/ ( Rz+ height ) ) >> help ( o r b i t a l _ v e l o c i t y ) Help on function orbital_velocity in module __main__: orbital_velocity(height) Скорость движения по круговой орбите вокруг Земли км/с height - высота орбиты в км Кафедра Теоретической механики Функции 15 / 39
  17. 17. Имя функции как переменная. Замыкания 1 def step_function ( x0 , y0 , y1 ) : 2 def step ( x ) : 3 i f x<x0 : 4 return y0 5 else : 6 return y1 7 return step Вызов функции step_function создает объект функцию step c заданными значениями x0, y0, y1: unit_step = step_function ( 0 . 0 , 0.0 , 1 . 0 ) >> unit_step ( −2) 0 >> unit_step ( 1 ) 1 Кафедра Теоретической механики Функции 16 / 39
  18. 18. Замыкание Функция (внутренняя), определяемая в теле другой (внешней) функции и создаваемая каждый раз во время выполнения внешней функции Внутренняя функция содержит ссылки на локальные переменные внешней функции Кафедра Теоретической механики Функции 17 / 39
  19. 19. Пространство имён
  20. 20. Локальные переменные При каждом вызове функции создаётся новое локальное пространство имён 1 a = 1 # Глобальная переменная модуля 2 3 def fun ( x ) : 4 a = 2 # Локальная переменная 5 return x + a >> fun ( 3 ) 5 >> a 1 Кафедра Теоретической механики Функции 19 / 39
  21. 21. Области видимости. Правило LEGB При использовании имени переменной внутри функции интерпретатор последовательно ищет соответствующий этому имени объект в локальной (L) области, в объемлющей (E) области, в глобальной (G) области, а затем во встроенной (B) 1 a = 1 # Глобальная переменная модуля 2 3 def parent_fun ( x ) : 4 b = 10 5 def fun ( x ) : 6 return x + a + b 7 return fun ( x ) >> parent_fun ( 7 ) 18 Кафедра Теоретической механики Функции 20 / 39
  22. 22. Инструкция global 1 a = 1 # Глобальная переменная модуля 2 def fun ( x ) : 3 b = 10 + a # a из глобальной области 4 a = 1 # ОШИБКА! 5 return b Local variable ’a’ referenced before assignment Изменить глобальную переменную можно, объявив её глобальной: 1 a = 1 # Глобальная переменная модуля 2 def fun ( x ) : 3 global a 4 a = 3 5 b = 10 + a 6 return b Кафедра Теоретической механики Функции 21 / 39
  23. 23. Инструкция nonlocal При необходимости изменить переменную объемлющей области её необходимо объявить nonlocal 1 a = 1 # Глобальная переменная модуля 2 def fun ( x ) : 3 a = 10 # Локальная переменная модуля функции fun 4 def inner_fun ( x ) : 5 nonlocal a # Переменная из объемлющей области 6 a = a + 5 # Было 10, стало 15 7 b = a + x 8 return b 9 res = inner_fun ( x ) 10 return ( a , res ) >> fun ( 1 ) (15 , 16) Кафедра Теоретической механики Функции 22 / 39
  24. 24. Функциональное программирование
  25. 25. Анонимная (лямбда) функция Короткие однострочные функции могут быть объявлены при помощи lambda-функций 1 mean = lambda x , y : ( x + y ) *0.5 Вызов функции mean ( 1 , 6 ) 3.5 Лямбда-функция обычно используется в паре с функциями filter, map, sort Кафедра Теоретической механики Функции 24 / 39
  26. 26. Функция filter Применение лямбда-функции с функцией filter 1 >> data = {1 , 7 , 3 , 2 , 6 , 8} 2 3 >> f i l t e r ( lambda x : x % 2 == 0 , data ) 4 5 {2 , 6 , 8} Кафедра Теоретической механики Функции 25 / 39
  27. 27. Функция filter Применение лямбда-функции с функцией filter data = {1 , 7 , 3 , 2 , 6 , 8} def less_than_5 ( x ) : return x < 5 >> f i l t e r ( less_than_5 , data ) {1 , 3 , 2} Кафедра Теоретической механики Функции 26 / 39
  28. 28. Функция filter Применение лямбда-функции с функцией filter data = {1 , 7 , 3 , 2 , 6 , 8} def less_than_5 ( x ) : return x < 5 >> f i l t e r ( less_than_5 , data ) {1 , 3 , 2} но лучше: def less_than ( value ) : return lambda x : x < value >> f i l t e r ( less_than ( 5 ) , data ) {1 , 3 , 2} или совсем просто: >> f i l t e r ( lambda x : x < 5 , data ) Кафедра Теоретической механики Функции 26 / 39
  29. 29. Функция map Функция map(function, data) применяет function к каждому элементу последовательности data: 1 data = [4 ,5 ,6 ,7] 2 3 >> map( lambda x : x * * 2 , data ) 4 < b u i l t i n s . map at 0xa8d36bcc > Функция map – ленивая функция. Функция возвращает не весь обработанный список, а ссылку на функцию-генератор, которая вычисляет значения по мере необходимости, подобно функции range: 1 >> l i s t (map( lambda x : x * * 2 , data ) ) 2 [16 , 25 , 36 , 49] Кафедра Теоретической механики Функции 27 / 39
  30. 30. Функция map Функцию map можно использовать для обработки нескольких списков: 1 vec1 = [1 ,4 ,3 ,7] 2 3 vec2 = [8 ,5 ,1 ,3] 4 5 prod = map( lambda x , y : x * y , vec1 , vec2 ) >> scalar_product = sum ( prod ) 52 Кафедра Теоретической механики Функции 28 / 39
  31. 31. Списочные выражения и генераторы
  32. 32. Списочные выражения Вместо функции map 1 data = [10 , 12 , 13 , 14] 2 3 >> l i s t (map( lambda x : x * * 2 , data ) ) 4 [16 , 25 , 36 , 49] можно использовать списочные выражения 1 res = [ x **2 f o r x in data ] 2 p r i n t ( res ) 3 4 [16 , 25 , 36 , 49] Кафедра Теоретической механики Функции 30 / 39
  33. 33. Дополнительные условия Выражение формирует список квадратов только чётных элементов из range(10): 1 [ x **2 f o r х in range (10) i f х % 2 == 0 ] 2 3 [0 , 4 , 16 , 36 , 64] Эту же последовательность можно сгенерировать при помощи функций map и filter: 1 l i s t ( map( lambda x : x * * 2 , 2 f i l t e r ( lambda x : x%2==0, range (10 ) ) ) ) 3 4 [0 , 4 , 16 , 36 , 64] Кафедра Теоретической механики Функции 31 / 39
  34. 34. Выражения с вложенными циклами Списочные выражения могут содержать несколько вложенных циклов: 1 [ x+ ’− ’ +y f o r x in ( ’A ’ , ’B ’ ) f o r y in ( ’ 1 ’ , ’ 2 ’ ) ] 2 3 [ ’A−1 ’ , ’A−2 ’ , ’B−1 ’ , ’B−2 ’ ] Кафедра Теоретической механики Функции 32 / 39
  35. 35. Функции-генераторы При помощи ключевого слова yield создаются функции, “лениво” генерирующие последовательности, подобно функции range В определении такой функции return заменяется на yield: 1 def progression ( a1 , d , n = 5) : 2 # an = a1 + d ( n−1) 3 f o r i in range ( n ) : 4 y i e l d a1+d * i >> progression (1 , 3) < generator object progression at 0xa8dc68c4 > >> l i s t ( progression (1 , 3) ) [1 , 4 , 7 , 10 , 13] Кафедра Теоретической механики Функции 33 / 39
  36. 36. Функции-генераторы Функция-генератор чисел Фибоначчи 1 def f i b ( count ) : 2 n0 , n1 = 0 , 1 3 f o r i in range ( count ) : 4 n0 , n1 = n1 , n0+n1 5 y i e l d n0 Вызов функции fib(10) вернёт ссылку на эту функцию, которая будет работать как итератор, а само выполнение функции “приостановится” на операторе yield. Кафедра Теоретической механики Функции 34 / 39
  37. 37. Функции-генераторы Функция-генератор чисел Фибоначчи 1 def f i b ( count ) : 2 n0 , n1 = 0 , 1 3 f o r i in range ( count ) : 4 n0 , n1 = n1 , n0+n1 5 y i e l d n0 Все элементы можно получить создав список по этому итератору 1 >> l i s t ( f i b (10) ) 2 3 [1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55] Кафедра Теоретической механики Функции 34 / 39
  38. 38. Функции-генераторы Функция-генератор чисел Фибоначчи 1 def f i b ( count ) : 2 n0 , n1 = 0 , 1 3 f o r i in range ( count ) : 4 n0 , n1 = n1 , n0+n1 5 y i e l d n0 Последовательно получить элементы можно при помощи функции next: 1 a = f i b (10 ) 2 >> next ( a ) 3 1 4 >> next ( a ) 5 1 6 >> next ( a ) 7 2 Кафедра Теоретической механики Функции 34 / 39
  39. 39. Функции-генераторы Функция-генератор чисел Фибоначчи 1 def f i b ( count ) : 2 n0 , n1 = 0 , 1 3 f o r i in range ( count ) : 4 n0 , n1 = n1 , n0+n1 5 y i e l d n0 yeld возвращает не результат работы функции а объект типа итератор, для получения результата, поэтому этот итератор можно использовать внутри конструкции for: 6 f o r i in f i b (10) : 7 p r i n t ( i , end= ’ , ’ ) 8 9 1 ,1 ,2 ,3 ,5 ,8 ,13 ,21 ,34 ,55 , Кафедра Теоретической механики Функции 34 / 39
  40. 40. Пример 1 text = ” Feci quod potui , f a c i a n t meliora potentes ” Формирование множества букв предложения: 2 l e t t e r s _ s e t = set ( text ) 3 l e t t e r s _ s e t . remove ( ’ ’ ) 4 l e t t e r s _ s e t . remove ( ’ , ’ ) Кафедра Теоретической механики Функции 35 / 39
  41. 41. Пример 1 text = ” Feci quod potui , f a c i a n t meliora potentes ” Формирование множества букв предложения: 2 l e t t e r s _ s e t = set ( text ) 3 l e t t e r s _ s e t . remove ( ’ ’ ) 4 l e t t e r s _ s e t . remove ( ’ , ’ ) Формирование списка пар (буква, частота): 6 res = [ ( x , text . count ( x ) ) f o r x in l e t t e r s _ s e t ] Кафедра Теоретической механики Функции 35 / 39
  42. 42. Пример 1 text = ” Feci quod potui , f a c i a n t meliora potentes ” Формирование множества букв предложения: 2 l e t t e r s _ s e t = set ( text ) 3 l e t t e r s _ s e t . remove ( ’ ’ ) 4 l e t t e r s _ s e t . remove ( ’ , ’ ) Формирование списка пар (буква, частота): 6 res = [ ( x , text . count ( x ) ) f o r x in l e t t e r s _ s e t ] Сортировка по второму элементу пары: 7 res . sort ( key = lambda pair : pair [ 1 ] , reverse = True ) Вывод первых пяти наиболее встречающихся букв: 8 p r i n t ( res [ : 5 ] ) [ ( ’ o ’ , 4) , ( ’ t ’ , 4) , ( ’ e ’ , 4) , ( ’ i ’ , 4) , ( ’ a ’ , 3) ] Кафедра Теоретической механики Функции 35 / 39
  43. 43. Списочные выражения и генераторы Списочное выражение формирует сразу весь список (list): 1 res = [ ( x , text . count ( x ) ) f o r x in l e t t e r s _ s e t ] >> type ( res ) l i s t Это выражение создаёт итератор, который будет вычислять следующее значение по требованию: 1 res = ( ( x , text . count ( x ) ) f o r x in l e t t e r s _ s e t ] ) >> type ( res ) i t e r a t o r Итератор можно пройти только один раз! Кафедра Теоретической механики Функции 36 / 39
  44. 44. Функция zip Функция zip(i1, i2, ...) объединяет итераторы-аргументы и создаёт итератор по кортежам элементов аргументов: 1 word = ” Qapla ” 2 f o r i , j in zip ( range ( len ( word ) ) , word ) : 3 p r i n t ( i +1 , ”буква” , j ) 1 буква Q 2 буква a 3 буква p 4 буква l 5 буква a Если аргументы-итераторы (последовательности) разной длины, то результирующий итератор будет иметь длину минимального аргумента. Кафедра Теоретической механики Функции 37 / 39
  45. 45. Задание
  46. 46. Игра “Жизнь” Колония клеток заданна множеством пар координат (множество кортежей), например: 1 colony = { ( 1 , 1 ) , ( 2 , 1 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 2 , 3 ) } Напишите функцию count_neighbors(x, y): функция возвращает количество соседей клетки с координатами x, y Напишите функцию get_colony_area(colony): функция возвращает множество клеток, граничащих с колонией, включая клетки, занятые колонией Кафедра Теоретической механики Функции 39 / 39
  47. 47. Игра “Жизнь” Колония клеток заданна множеством пар координат (множество кортежей), например: 1 colony = { ( 1 , 1 ) , ( 2 , 1 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 2 , 3 ) } Напишите функцию next_generation(colony): функция возвращает множество клеток следующего поколения, количество умерших и родившихся клеток Кафедра Теоретической механики Функции 39 / 39
  48. 48. Игра “Жизнь” Колония клеток заданна множеством пар координат (множество кортежей), например: 1 colony = { ( 1 , 1 ) , ( 2 , 1 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 2 , 3 ) } Напишите функцию def game_life ( born = ( 3 , ) , survives = ( 2 , 3 ) ) : . . . return next_generation возвращающую функцию типа next_generation(colony), которую можно использовать для исследования эволюции колонии по различным правилам, задаваемым параметрами born и survives. Кафедра Теоретической механики Функции 39 / 39

×