<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Пакеты и окружение для Python
easy_install (setuptools) - старый менеджер пакетов (практически не используется)
pip - новый менеджер пакетов
virtualenv - установить конкретные версии пакетов локально
virtualenvwrapper - отличная обертка для virtualenv
Общий репозиторий пакетов https
Step1:  Вопрос
Какой "магической" командой можно померить время выполнения куска кода? 
Jupyter (ex IPython Notebook)
Независимые ячейки с кодом
Текстовые данные, Markdown и LaTeX
Простой текстовый формат .ipynb
Inline-графика, в том числе трехмерная и интерактивная
Виджеты
Поддержка «ядер»
@ellisonbg
@fperez_org
Как сделана эта презентация
https
Step2:  Заготовка для типичного скрипта на Python
Step3:  Модули
Step4:  Обработка ошибок
Step5:  Генерация списков (списковые включения)
Step6:  Еще немного встроенных функций
* Мы уже знаем max(), min(), sorted(), len(), sum(). Что они делают?
* А вот еще - any(), all(), abs(), dir()
<ASSISTANT_TASK:>
Python Code:
%time "list(range(1000000)); print('ololo')"
Explanation: Пакеты и окружение для Python
easy_install (setuptools) - старый менеджер пакетов (практически не используется)
pip - новый менеджер пакетов
virtualenv - установить конкретные версии пакетов локально
virtualenvwrapper - отличная обертка для virtualenv
Общий репозиторий пакетов https://pypi.python.org/pypi
Предсобранные пакеты для Windows: http://www.lfd.uci.edu/~gohlke/pythonlibs/
http://docs.python-guide.org/en/latest/dev/virtualenvs/
Работа с virtualenv (если у вас Python с python.org)
Создаем окружение
python3 -m venv my_venv
Заходим в него:
source my_venv/bin/activate (на Windows: my_venv\scripts\activate.bat)
Выходим:
deactivate
Еще удобно через virtualenvwrapper:
workon my_venv ; lsvirtualenv ; rmvirtualenv my_venv
Лично я всегда первым делом обновляю установщики:
pip install -U pip wheel setuptools
Лучше ВООБЩЕ НИКОГДА не делать "sudo pip install"
Работа с virtualenv (если у вас Anaconda)
Создаем окружение
conda create --name my_venv
Заходим в него:
source activate my_venv/activate myenv
Выходим:
deactivate/source deactivate
Ставим пакеты с помощью conda install вместо pip install:
conda install requests
Чтобы удалить окружение, используем
conda remove --name my_venv --all
Лучше ВООБЩЕ НИКОГДА не делать "sudo pip install"
Подробнее: https://conda.io/docs/user-guide/tasks/manage-environments.html
IPython!
pip install ipython
Подстановка по Tab
История команд (стрелка вверх)
Интеграция с системным shell
Встроенный механизм показа справки ("?")
%magic
Редактирование многострочных кусков кода
End of explanation
def my_cool_function(a, b):
    return a + b
def my_cool_function2(a: int, b: int) -> int:
    return a + b
def my_cool_function(a, b):
    return a + b
my_cool_function2("foo", "bar")
Explanation: Вопрос
Какой "магической" командой можно померить время выполнения куска кода? 
Jupyter (ex IPython Notebook)
Независимые ячейки с кодом
Текстовые данные, Markdown и LaTeX
Простой текстовый формат .ipynb
Inline-графика, в том числе трехмерная и интерактивная
Виджеты
Поддержка «ядер»
@ellisonbg
@fperez_org
Как сделана эта презентация
https://github.com/damianavila/RISE
Прежде чем продолжать, давайте настроим, чтобы она работала у всех
Где лучше всего писать код проекта
Sublime Text 3
VSCode
Atom
PyCharm
Как выглядит проект на Python
Файлы (модули) Python имеют расширение ".py"
"Пакеты" Python - это папки, в которых есть файл __init__.py
Внутри модулей код разделен на функции и классы согласно логике приложения
Правилом хорошего тона считается оформлять код по PEP8
Функции
https://www.tutorialspoint.com/python/python_functions.htm
End of explanation
def main():
    # here be dragons
    return
if __name__ == "__main__":
    main()
Explanation: Заготовка для типичного скрипта на Python
End of explanation
import random   # встроенный модуль
import os.path as op  # импорт с псевдонимом
random.randint(1, 10)
from os.path import *
from sample2 import fibonacci
sample2.fibonacci(5)
Explanation: Модули
End of explanation
import traceback
d = {}
try:
    1 / 0
except KeyError as exc:
    print(traceback.format_exc())
except ZeroDivisionError as an_exc:
    print("bad luck")
Explanation: Обработка ошибок
End of explanation
import random
a = [
    random.randint(-10, 10)
    for _ in range(10)
]
a
b = [item ** 2 for item in a if item > 0]
b
Explanation: Генерация списков (списковые включения)
End of explanation
a = "asfdhasdfh"
dir(a)
Explanation: Еще немного встроенных функций
* Мы уже знаем max(), min(), sorted(), len(), sum(). Что они делают?
* А вот еще - any(), all(), abs(), dir()
End of explanation
<END_TASK>