Kodomo

Пользователь

Занятие 11.

Краткое содержание: Функции высшего порядка.


План рассказа

  1. Функции высшего порядка.
    • Функция как объект:

         1 >>> def f (x):
         2 ...     """ Some dull function """
         3 ...     print x
         4 ... 
         5 >>> f
         6 <function f at 0xb7d19b54>
         7 >>> f.__doc__
         8 ' Some dull function '
         9 >>> f(1)
        10 1
        11 >>> x = f
        12 >>> x(2)
        13 2
      
    • Как можно сочинять свои функции, получающие функции в качестве аргумента:

         1 def foreach(func, list):
         2   """ Apply func to each element of list """
         3   result = []
         4   for i in list:
         5     result.append(f[i])
         6   return result
      
    • Готовые функции высшего порядка:
      • map(func, list) – синоним [func(i) for i in list]

      • filter(func, list) – синоним [i for i in list if func(i)]

      • reduce(func, list, [init]): reduce(f, [1,2,3], 0) – синоним f(f(f(0, 1), 2), 3)

    • Конструкция lambda:

         1 >>> reduce(lambda x, y: (x, y), [1,2,3])
         2 ((1, 2), 3)
      
  2. Необязательные аргументы функций.
  3. Разбор прогресса по зачётному заданию:
    • координатор проекта != мальчик на побегушках
    • текущее состояние всего: ничего не работает
    • отдельные забавные фрагменты кода (копирование кода; забавный код в main.py)
    • распечатать логи изменений
    • вопрос к Боре и Наде на тему документации: где она хорошая, где она плохая
    • проблемы с типами переносов строк
    • моё мнение о читаемости кода в разных местах
    • оставшиеся задачи:
      • Alignment: (чтение структуры родственности последовательностей)
      • Alignment: переделать выделение консервативных последовательностей на универсальное
      • Alignment: (построение выделения из зазоров выравнивания)
      • Selection: упорядоченное отображение в FASTA (визуализация блоков)
      • Selection: отображение блоков в HTML
      • Доделать интерфейс
      • Чтение классов эквивалентности