Модули:
Модуль time
Объект struct_time содержит:
d= time.gmtime() d.tm_year, d[0] # Все содержимое tuple(d) >> (2017, 11, 21, 14, 19, 34, 1, 325, 0)
time.sleep(sec)
Модуль содержит классы:
Конструктор- timedelta(<days>=, <seconds>=, <microsec>=, <milisec>=, <minutes>=, <hours>=, <weeks>= )
Можно присваивать в порядке следования, либо именованными аргументами (timedelta(hours= 1))
Поддерживаются арифметические операции, сравнение и т.д.
d1= datetime.timedelta(days= 2) d2= datetime.timedelta(days= 7) d1 + d2, d1 / d2 ...
Операции над датами. date(<год>, <месяц>, <день>).
Для получения есть методы:
d= datetime.date.today() d.day, d.month, d.year
Есть методы: replace(), strftime(), isoformat(), ctime(), timetuple(), toordinal(), weekday(), isoweekday(), isocalendar().
Операции над временем. time(<hour>=, <minute>=, <second>=, <microsec>=, <tzinfo>=, <fold>= )
Арифметические действия не поддерживаются, только сравнение.
В целом аналогично предыдущим, включает многое из них, в конструкторе обязательно дата, время не обязательно
Содержит классы для вывода календаря в простом, текстовом виде
Базовый класс Calendar, возвратит перечень всех чисел указанного месяца, сгруппированных по дням недели
TextCalendar (LocateCalendar ) в виде форматированного текста (локализованные названия)
HTMLCalendar, LocateHTMLCalendar в html формате
import calendar c= calendar.Calendar(0) print(c.monthdayscalendar(2017, 11)) c= calendar.TextCalendar(0) print(c.formatyear(2017))
Атрибуты:
Замер не конкретного куска кода а лишь образца кода, который передается строкой..
from timeit import Timer
Timer(<stmt>=, <setup>=, <timer>= ) - в первом указывается код, который нужно замерить, второй- код который нужно выполнить перед измерением
code1= """ for line in arr: ... """ t1= Timer(stmt= code1) >> t1.timeit()
Оператор pass можно использовать как загрузку для пустой функции
Функция сама является объектом, ссылкой, которую можно присваивать переменны, передавать и т.д.
Поддерживает стандартные атрибуты, такие как: name, doc, sizeof, dir и т.д., перечень можно получить вызовом функции dir()
Определение должно быть перед вызовом, при использовании функции main, по сути не актуально
Необязательность имеется ввиду значение по умолчанию, определение по ключам (по имени) поддерживается априори и порядок не имеет значения
Все аргументы передаются по ссылке поэтому изменяемые типы данных могут изменить исходную переменную, чтобы избежать, можно передавать копию, (func(var.copy()))
Что касается предопределенных переменных - они похоже статические и могут накапливать значение при повторных вызовах, можно указать значение None
Если перед переменной указать звездочку, то принимать сможем любое кол-во аргументов, придут они в кортеже
Если две звездочки, тогда в словаре
Если указать первое затем второе, то функция примет любое кол-во переменных. Указанные между ними параметры можно будет передавать только по именам.
Если функция не должна принимать переменного кол-ва параметров, но должна принимать только по именам, нужно указать звездочку без имени переменной
# Произвольное кол-во параметров def func(*t): for i in t: ... # Ф-я примет любые параметры def func(*x, **y): ... # Аргументы только по именам def func(x=1, y=2, *, a): ...
т.н. лямбда функция, без имени, в качестве значения возвращает ссылку на объект-функцию, которую можно передать или присвоить переменной
f1= lambda: 10 + 20 f2= lambda x, y: x + y # аргументы print(f1()) print(f2(10, 20))
При последовательных вызовах, возвращает очередной элемент какой-либо последовательности, приостановить выполнение в текущем вызове можно оператором yield
Использование этого оператора собсна и делает обычную функцию функцией-генератором
Удобно при обработке действительно большой последовательности, в таком случае она не будет вся загружаться в память, а будет обрабатываться последовательно
Эти функции поддерживают метод next(), позволяющий получить следующее значение
Можно вкладывать генераторы
def func(x, y): for i in range(1, x+ 1): yield i ** y i= func(3, 3) print(i.__next__()) # Выведет: 1 (1 ** 3) print(i.__next__()) # Выведет: 8 (2 ** 3) print(i.__next__()) # Выведет: 27 (3 ** 3) print(i.__next__()) # Исключение StopIteration
Обычные функции, выполняются перед вызовом целевой, для этого нужно указать «@mydecor» перед определением целевой
В аргументе декора передается ссылка на целевую функцию, видимо
def deco(f): ... return f # ссылка на целевую ф-ю @deco def func(x): ... print (func(10))
Все как обычно, только кол-во вызовов ограничено (1К), превышение вызывает исключение
Глобальные переменные те что определены за пределами любой функции, и доступны во всем скрипте
Для обращение к ней из функции, возможно нужно внутри определить ее ключевым словом global, т.к. в локальной области по умолчанию переменные не пересекаются с глобальными, даже с одинаковым названием
Внутри вложенной функции доступна область видимости родительской функции
Доступны но изменить во вложенной так просто нельзя видимо, нужно объявить ее там оператором nonlocal
Не забываем что переменные передаются ссылками
Документирование аргументов функций
# Описание после двоеточия, можно указать выражение def func(a: "Нужная переменная", b: 10+2= 12)