Различия между версиями 6 и 7
Версия 6 от 2017-07-31 04:17:01
Размер: 6647
Редактор: ArsenyMaslennikov
Комментарий:
Версия 7 от 2017-08-03 12:47:34
Размер: 8402
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 13: Строка 13:
# функция, перемножающая 3 своих численных аргумента # функция, перемножающая три параметра
Строка 18: Строка 18:
     * Параметры могут быть какого угодно типа, функция всё равно вызовется
     * Если параметры нельзя перемножить друг на друга, произойдёт исключение
     * Если можно, вернётся результат, тип которого определяется типом выражения `a*b*c`
     * Примеры: `1, 2, 3`, `1.1, 2.345, 0`, `"QWE", 2, 4`, `3, ["QWE",RTY"], 2`
Строка 21: Строка 25:
   * `locals()` и `globals()`
   * {*} просто вывод
   * `locals()` и `globals()`, что они показывают
Строка 24: Строка 27:
   * автоопределение локальных имён; global
    * {*}
   * автоопределение локальных имён: есть ли связывание в локальном пространстве
   * `
global`
Строка 35: Строка 38:
   * {*} функция, возвращающая среднее квадратичное своих аргументов    * {*} функция, возвращающая среднее квадратичное своих параметров
Строка 40: Строка 43:
  * Распаковка последовательности при вызове
   * {*}, в т. ч. `print(*seq)`
  * Распаковка последовательности при вызове: вместо части позиционных параметров можно передать конструкцию `*последовательность`
   * {*}, например, `print(*seq)` выведет любой список в виде объектов через пробел
Строка 57: Строка 60:
  * {*}   * {*} Написать «тупой» модуль, в котором будет один объект-функция и один объект-число, функция должна менять это число. Модуль и функция должны быть документированы
  {{{#!highlight python3
"""Just dummy module
that provides nothing
Строка 59: Строка 65:
Variables:
    Var: dummy variable
"""

Var = 7 # Dummy variable

def Function(a, b):
    """Set Var to max(2a,3b); return min(3a,2b)"""
    Var = max(a*2,b*3)
    return min(a*3,b*2)
}}}
    Получившийся `help(modul)`
  {{{
Help on module modul:

NAME
    modul

DESCRIPTION
    Just dummy module
    that provides nothing
    
    Variables:
        Var: dummy variable

FUNCTIONS
    Function(a, b)
        Set Var to max(2a,3b); return min(3a,2b)

DATA
    Var = 7

FILE
    /var/home/george/src/modul.py
}}}

Повторное использование кода; пространства имён, методы объектов

Функции (введение)

  • Задача повторного использования кода — макросы и подпрограммы
  • Функции в Python
    • Функция — это запись алгоритма обработки данных, а не преобразование, как в математике
    • duck typing

    • вызов функции — выражение, всегда есть возвращаемое значение — любой объект (например, None)
    • возвращаемое значение можно не использовать
    • Определение функции, формальные параметры
      • {*} простые примеры

        •    1 # функция, перемножающая три параметра
             2 def fn(a,b,c):
             3     return a*b*c
             4 # ...
          
        • Параметры могут быть какого угодно типа, функция всё равно вызовется
        • Если параметры нельзя перемножить друг на друга, произойдёт исключение
        • Если можно, вернётся результат, тип которого определяется типом выражения a*b*c

        • Примеры: 1, 2, 3, 1.1, 2.345, 0, "QWE", 2, 4, 3, ["QWE",RTY"], 2

    • Локальное пространство имён функции
      • просто вывод dir()

      • независимость имён
      • locals() и globals(), что они показывают

      • порядок просмотра пространств
      • автоопределение локальных имён: есть ли связывание в локальном пространстве
      • global

    • с этого момента и до конца курса каждые модуль/функция/класс в заданиях {i} должны содержать docstring с пояснением, что они делают

    • {i} Функция — сумма цифр

    • {i} Используя предыдущую функцию: ввести последовательность, вывести элемент с минимальной суммой цифр

      • <!> можно с помощью min() — как?

    • {i} функция — расстояние между точками ( <!> на самом деле есть :) )

      • Ввести список пар вида (1,2), (3,4), (100,100) …, найти самые удалённые точки

  • Распаковка и запаковка параметров функций
    • ничего и нет, только списки
    • Функции с переменным количеством параметров
      • {*} функция, возвращающая среднее квадратичное своих параметров

        •    1 def middle(*args):
             2     return sum(a*a for a in args)**(1/2)
          
    • Распаковка последовательности при вызове: вместо части позиционных параметров можно передать конструкцию *последовательность

      • {*}, например, print(*seq) выведет любой список в виде объектов через пробел

  • {i} функция, возвращающая список только целочисленных из всех параметров

  • Всё остальное про функции — потом, не сегодня

Методы объектов; модули

  • Поля объектов, инкапсуляция
    • dir(объект)

    • объект.имя_поля

    • методы и … поля
  • Модули, sys.path

    • программа на Python как модуль
    • встроенная и в среду Python, и в язык Python документация
      • help()

      • документирование собственного кода
        • docstring
        • object.__doc__

    • {*} Написать «тупой» модуль, в котором будет один объект-функция и один объект-число, функция должна менять это число. Модуль и функция должны быть документированы

         1 """Just dummy module
         2 that provides nothing
         3 
         4 Variables:
         5     Var: dummy variable
         6 """
         7 
         8 Var = 7 # Dummy variable
         9 
        10 def Function(a, b): 
        11     """Set Var to max(2a,3b); return min(3a,2b)"""
        12     Var = max(a*2,b*3)
        13     return min(a*3,b*2)
      
      • Получившийся help(modul)

      Help on module modul:
      
      NAME
          modul
      
      DESCRIPTION
          Just dummy module
          that provides nothing
          
          Variables:
              Var: dummy variable
      
      FUNCTIONS
          Function(a, b)
              Set Var to max(2a,3b); return min(3a,2b)
      
      DATA
          Var = 7
      
      FILE
          /var/home/george/src/modul.py

Строки и их методы

  • Строковые методы
    • все (в т. ч. in)

    • replace()

      • {*}

        Python 3.5.3+ (default, Jun  7 2017, 23:23:48) 
        [GCC 6.3.0 20170516] on linux
        Type "help", "copyright", "credits" or "license" for more information.
        >>> s = "Наш паровоз вперёд летит!"
        >>> 
        >>> s.replace("паровоз", "самовар")
        'Наш самовар вперёд летит!'
        >>> st = s.replace("паровоз", "самолёт")
        >>> s
        'Наш паровоз вперёд летит!'
        >>> st
        'Наш самолёт вперёд летит!'
        >>>
        >>> st.replace("ё", "*")
        'Наш самол*т впер*д летит!'
        >>> # видим, что подменяются _все_ вхождения подстроки
    • split() и join()

      • {*}

        Python 3.5.3+ (default, Jun  7 2017, 23:23:48) 
        [GCC 6.3.0 20170516] on linux
        Type "help", "copyright", "credits" or "license" for more information.
        >>> s = "Наш паровоз вперёд летит!"
        >>> s.split()
        ['Наш', 'паровоз', 'вперёд', 'летит!']
        >>> s.split('р')
        ['Наш па', 'овоз впе', 'ёд летит!']
        >>> # разделительный символ не попадает в список!
        >>>
        >>> s
        'Наш паровоз вперёд летит!' 
        >>> # как выясняется, s не изменилась
        >>>
        >>> s.split('')
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        ValueError: empty separator
        >>> s.split('!')
        ['Наш паровоз вперёд летит', '']
        >>> s.split('Н')
        ['', 'аш паровоз вперёд летит!']
        >>> s.split('Z') # а если разделителя в строке нет?
        ['Наш паровоз вперёд летит!']
        
        >>> sep = '+'
        >>> sep.join(["Sasha", "Masha"])
        'Sasha+Masha'
        >>> ', '.join(("Veni", "vidi", "vici"))
        'Veni, vidi, vici'

    хорошо бы сюда ещё пример с конструктором п-ти строчек -- ArsenyMaslennikov 2017-07-31 03:56:18

  • {i} Ввести строку, заменить в ней последовательности "-" на один минус

  • {i} Ввести запрещённое сочетание букв и строку. Вывести строку, в которой запрещённое сочетание букв не встречается

    • (например, "ab" и "aabbcaabbb" → "cb")

Списки и их методы

  • все методы
  • стек, суть pop()/push(), эффективность
  • очередь и deque()
  • {i} Функция, возвращающая список всех делителей числа

  • {i} Функция списка, убирающая из списка подряд идущие одинаковые элементы

    • <!> Для уверенных в себе: То же, но повторять, пока таких групп не останется.

Python/Summer2017/2017-07-06 (последним исправлял пользователь FrBrGeorge 2017-08-03 12:47:34)