SlideShare a Scribd company logo
Лекция 1: Начало
Сергей Лебедев
sergei.a.lebedev@gmail.com
7 сентября 2015 г.
Логистика курса
• n ≈ 10 лекций;
• n − 1 домашних заданий
• несколько задач, которые нужно решить на Python,
• решения можно сдавать в течение недели после лекции без
штрафа и в течение второй недели со штрафом 50%;
• каждая задача оценивается максимум 4 баллами: по два за
корректность и стилистику;
• n − 1 тестов
• несколько вопросов по материалам предыдущей лекции,
• полностью правильный тест оценивается 4 баллами.
1 / 37
Скучающий компьютерный ученый
«[…] in December 1989, I was looking for a “hobby” programming
project that would keep me occupied during the week around
Christmas. My office […] would be closed, but I had a home
computer, and not much else on my hands.»
Foreword for “Programming Python” (1st ed.)
2 / 37
Источники вдохновения
ABC
HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection
Modula-3
TRY
DO.Something()
EXCEPT
| IO.Error => IO.Put("An I/O error occurred.")
END;
3 / 37
Цели и результаты1
• Хотелось простой, понятный, удобный и полезный язык с
открытым исходным кодом.
• Получилось
def magic(dir):
acc = []
for root, dirs, files in os.walk(dir):
acc.extend(os.path.join(root, file)
for file in files)
return acc
• Что делает функция magic?
1
https://www.python.org/doc/essays/cp4e
4 / 37
Python — динамический интепретируемый язык
>>> def add(x, y):
... return x + y
...
>>> def bar(x):
... add(x, "1", "2") # не ошибка
...
>>> add.__code__ = bar.__code__
>>> add(42)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in bar
TypeError: bar() takes 1 positional argument but 3 [...]
5 / 37
Python — динамический интепретируемый язык
$ cat ./hello.py
message = "Hello, world!"
$ python -m dis ./hello.py
0 LOAD_CONST 0 ('Hello, world!')
3 STORE_NAME 0 (message)
6 LOAD_CONST 1 (None)
9 RETURN_VALUE
6 / 37
Интепретаторы
7 / 37
Python 2000 и Python 30002
• Две несовместимых ветки языка: Python 2.X и Python 3.X.
• Официально ветка 2.X в режиме поддержки, а 3.X — в
режиме развития.
• Мы будем использовать ветку 3.X.
2
http://vitaliypodoba.com/2014/05/python2-or-python3
8 / 37
Идеи
Основные идеи языка: файл, модуль, пространство имён
>>> import hello
>>> hello
<module 'hello' from '[...]/hello.py'>
>>> dir(hello)
['__builtins__', '__cached__', '__doc__', '__file__',
'__loader__', '__name__', '__package__', '__spec__',
'message']
>>> hello.__name__, hello.__file__
('hello', '[...]/hello.py')
>>> print(hello.message)
"Hello, world!"
9 / 37
Основные идеи языка: отступы вместо скобочек
>>> while True:
... print(42)
File "<stdin>", line 2
print(42)
^
IndentationError: expected an indented block
10 / 37
Основные идеи языка: всё есть объект
>>> import hello
>>> type(hello)
<class 'module'>
>>> type(type(hello))
<class 'type'>
>>> type(type(type(hello)))
<class 'type'>
11 / 37
Типы
Основные типы языка: странные и логические
Странные
>>> None
>>> None == None
True
>>> None is None
True
Логические
>>> to_be = False
>>> to_be or not to_be
True
>>> True or print(None) # ленивый оператор
True
>>> 42 + True
43
12 / 37
Основные типы языка: числовые
>>> 42 # int
42
>>> .42 # float
0.42
>>> 42j # complex
42j
>>> 42**24 # приведение к длинному числу
907784931546351634835748413459499319296
>>> 16 / 3 # приведение к числу с плавающей точкой
5.333333333333333
>>> 16 // 3
5
>>> 16 % 3
1
13 / 37
Основные типы языка: строковые
>>> b"foo"
b'foo'
>>> b"foo".decode("utf-8")
'foo'
>>> "bar"
'bar'
>>> bar = "bar"
>>> len(bar)
3
>>> bar[0]
'b'
>>> s = "." * 10
>>> s
'..........'
>>> "<>" + s + "<"
'<>..........<'
>>> " foo bar ".strip()
'foo bar'
14 / 37
Основные типы языка: список
>>> [] # или list()
[]
>>> [0] * 4
[0, 0, 0, 0]
>>>
>>> xs = [1, 2, 3, 4]
>>> len(xs)
4
>>> xs[0]
1
>>> xs[0] = -1
>>> xs
[-1, 2, 3, 4]
>>> xs.append(42)
[-1, 2, 3, 4, 42]
>>> del xs[0] # или xs.pop(0)
[2, 3, 4, 42]
15 / 37
Основные типы языка: конкатенация и слайсы
Конкатенация
>>> xs = [1, 2, 3, 4]
>>> xs + [5, 6]
[1, 2, 3, 4, 5, 6]
>>> ", ".join(["foo", "bar"])
'foo, bar'
Слайсы
>>> xs = [1, 2, 3, 4]
>>> xs[:2]
[1, 2]
>>> xs[2:]
[3, 4]
>>> xs[1:3]
[2, 3]
>>> xs[0:4:2]
[1, 3]
>>> xs[:]
[1, 2, 3, 4]
>>> s = "foobar"
>>> s[:2]
'fo'
>>> s[2:]
'obar'
>>> s[1:3]
'oo'
>>> s[0:4:2]
'fo'
>>> s[:]
'foobar'
16 / 37
Основные типы языка: кортеж
>>> tuple() # неизменяемый
()
>>> date = ("year", 2015)
('year', 2015)
>>> len(date)
2
>>> date[1] = 2016
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> del date[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
17 / 37
Основные типы языка: множество
>>> set() # хеш-сет
set()
>>> xs = {1, 2, 3, 4}
>>> 42 in xs
False
>>> 42 not in xs
True
>>> xs.add(42) # {1, 2, 3, 4, 42}
>>> xs.discard(42) # {1, 2, 3, 4}
Капитан сообщает
Операторы in и not in работают для всех контейнеров:
>>> 42 in [1, 2, 3, 4]
False
>>> "month" not in ("year", 2015)
True
18 / 37
Основные типы языка: операции над множествами
>>> xs = {1, 2, 3, 4}
>>> ys = {4, 5}
>>> xs.intersection(ys)
{4}
>>> xs & ys
{4}
>>> xs.union(ys)
{1, 2, 3, 4, 5}
>>> xs | ys
{1, 2, 3, 4, 5}
>>> xs.difference(ys)
{1, 2, 3}
>>> xs - ys
{1, 2, 3}
19 / 37
Основные типы языка: словарь
>>> {} # или dict(), хеш-таблица
{}
>>> date = {"year": 2015, "month": "September"}
>>> len(date)
2
>>> date["year"]
2015
>>> date.get("day", 7)
7
>>> date["year"] = 2016
>>> date
{'month': 'September', 'year': 2016}
>>> del date["year"] # или date.pop("year")
{'month': 'Semptember'}
Вопрос
Как проверить наличие элемента в словаре?
20 / 37
Основные типы языка: ключи и значения
>>> date = {"year": 2015, "month": "September"}
>>> date.keys()
dict_keys(['month', 'year'])
>>> date.values()
dict_values(['September', 2015])
>>> date.items()
dict_items([('month', 'September'), ('year', 2015)])
>>> other_date = {"month": "October", "day": 24}
>>> date.keys() + other_date.keys()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: [...]
>>> date.keys() | other_date.keys()
{'date', 'month', 'year'}
21 / 37
Основные типы языка: резюме
• Базовых типов не очень много:
• None;
• логические True, False;
• числовые int, float, complex;
• строковые bytes, str;
• изменяемые коллекции list, set, dict,
• неизменяемые коллекции tuple.
• Чаще всего над объектами из одной группы можно
совершить конкретное действие одним очевидным
способом:
>>> 1 + 1
>>> 1. + 1.
>>> 1j + 1j
>>> b"p" + b"y"
b'py'
>>> "p" + "y"
'py
>>> 42 in {42}
>>> 42 in [42]
>>> 42 in {42: "..."}
22 / 37
Управляющие
конструкции
Основные конструкции языка: if
>>> x = 42
>>> if x % 5 == 0:
... print("fizz")
... elif x % 3 == 0:
... print("buzz")
... else:
... pass # необязательная ветка
...
buzz
Тернарный оператор
>>> "even" if x % 2 == 0 else "odd"
'even'
Мотивацию для такого решения Гвидо можно прочитать в
архивах рассылки python-dev3.
3
http://bit.ly/python-dev-ifthen
23 / 37
Основные конструкции языка: while и for
>>> i = 0
>>> while i < 10:
... i += 1
...
>>> i
10
>>> sum = 0
>>> for i in range(1, 5):
... sum += i * i
...
>>> sum
30
Капитан сообщает
В Python есть операторы break и continue, которые работают ≈
также как и в других императивных языках.
>>> while False:
... pass
... else:
... print("What on earth is this?")
...
What on earth is this?
24 / 37
Основные конструкции языка: range и reversed
range
Принимает три аргумента: начало полуинтервала, конец
полуинтервала и опциональный аргумент — шаг, который
может быть отрицательным.
>>> range(0, 5, 2)
range(0, 5, 2)
>>> list(range(0, 5, 2))
[0, 2, 4]
>>> list(range(4, -1, -2))
[4, 2, 0]
reversed
Перечисляет элементы переданной ей последовательности в
обратном порядке.
>>> list(reversed([1, 2, 3]))
[3, 2, 1]
25 / 37
Основные конструкции языка: больше о for
for можно использовать для итерации по коллекциям, файлам
и вообще много чему.
>>> for x in [0, 1, 1, 2, 3]:
... pass
...
>>> for x in reversed([0, 1, 1, 2, 3]):
... pass
...
>>> for line in open("./HBA1.txt"):
... pass
...
>>> for ch in "abracadabra":
... pass
26 / 37
Основные конструкции языка: резюме
• В Python есть многое из того, что так дорого программисту
на императивном языке: if, for, while, тернарный
оператор.
• В Python нет
• фигурных скобок для обозначения области видимости,
>>> from __future__ import braces
File "<stdin>", line 1
SyntaxError: not a chance
• циклов с пост-условием, потому что while вполне
достаточно,
• операторов switch и for с явным счетчиком, потому что
они имеют нетривиальную семантику.
27 / 37
Zen
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
28 / 37
IPython
29 / 37
IPython за 5 минут
• IPython — более лучшая интерактивная оболочка для
языка Python.
• Она поддерживает:
• интроспекцию и дополнение имён модулей, классов,
методов, переменных,
• работу с историей,
• использование стандартных команд UNIX, например, ls,
• систему “магических” команд %%magic.
• Установить можно с помощью менеджера пакетов pip
$ pip install "ipython[all]"
30 / 37
IPython: интроспекция и дополнение
In [1]: from builtins import di<TAB>
dict dir divmod
In [2]: d = {"foo": "bar"}
In [3]: d.c<TAB>
d.clear d.copy
In [4]: def f():
...: "I do nothing and return 42."
...: return 42
...:
In [5]: f? # вывод ?? также содержит исходный код.
Type: function
String form: <function f at 0x103d68ae8>
File: ...
Definition: f()
Docstring: I do nothing and return 42.
31 / 37
IPython: работа с историей
# номер ячейки
# |
# v
In [1]: [1, 2, 3]
Out[1]: [1, 2, 3]
In [2]: _[1:] # ссылка на предыдущую ячейку
Out[2]: [2, 3]
In [3]: __[1:] # ссылка на две ячейки назад
Out[3]: [2, 3]
In [4]: Out[2] == Out[3] # ссылка на ячейку по номеру
Out[4]: True
32 / 37
IPython: стандартные команды UNIX
In [1]: pwd
Out[1]: './cscenter/python'
In [2]: ls lecture*.tex
lecture-base.tex lecture01.tex
In [3]: cd /tmp
/tmp
In [4]: !date
Wed 2 Sep 2015 23:26:54 MSK
In [5]: output = !date
In [6]: output
Out[6]: ['Wed 2 Sep 2015 23:27:08 MSK']
33 / 37
IPython: “магические” команды
• “Магические” команды отвечают за магию.
• Однострочные “магические” команды начинаются с
символа %, многострочные — с %%.
• Пример однострочной “магической” команды, которая
позволяет отредактировать и вычислить содержимое
ячейки с указанным номером:
In [1]: def f():
...: pass
...:
In [2]: %edit 1
IPython will make a temporary file named: [...]
done. Executing edited code...
Out[2]: 'def f():n return 42n'
In [3]: f()
Out[3]: 42
34 / 37
IPython: “магические” команды и автомагия
• По умолчанию IPython работает в режиме %automagic, то
есть префикс % у однострочных команд можно не писать.
• Команды UNIX, которыми мы уже пользовались, — это
“магические” команды IPython, вызванные без префикса %.
• Пример многострочной “магической” команды, которая
сохраняет содержимое ячейки в указанный файл:
In [1]: %%writefile /tmp/example.py
...: def f():
...: return 42
...:
Writing /tmp/example.py
In [2]: %load /tmp/example.py
In [4]: f()
Out[4]: 42
35 / 37
IPython: больше “магических” команд
In [1]: env EDITOR
Out[1]: 'nano'
In [2]: env EDITOR=emacs
env: EDITOR=emacs
In [3]: %cpaste
Pasting code; enter '--' alone on the line to stop
: def f():
: return "I'm badly indented!"
:--
In [4]: f()
Out[4]: "I'm badly indented!"
In [5]: %timeit sum(range(1000))
10000 loops, best of 3: 25.1 µs per loop
In [6]: %lsmagic # DIY.
36 / 37
IPython: резюме
• IPython — удобная и полезная альтернатива стандартной
интерактивной оболочке Python.
• Мы поговорили только про основы её использования.
Больше информации можно найти на сайте:
http://ipython.org.
37 / 37

More Related Content

What's hot

Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
Roman Brovko
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.
Roman Brovko
 
Лекция 4. Строки, байты, файлы и ввод/вывод.
 Лекция 4. Строки, байты, файлы и ввод/вывод. Лекция 4. Строки, байты, файлы и ввод/вывод.
Лекция 4. Строки, байты, файлы и ввод/вывод.
Roman Brovko
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.
Roman Brovko
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
Python Meetup
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Python Meetup
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
Python Meetup
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
Яковенко Кирилл
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
MoscowDjango
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
Sergey Schetinin
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
PyNSK
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?
PyNSK
 
Python и его тормоза
Python и его тормозаPython и его тормоза
Python и его тормоза
Alexander Shigin
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
Vladimir Rudnyh
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
PyNSK
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
Vasiliy Deynega
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассов
Andrey Zakharevich
 

What's hot (18)

Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.
 
Лекция 4. Строки, байты, файлы и ввод/вывод.
 Лекция 4. Строки, байты, файлы и ввод/вывод. Лекция 4. Строки, байты, файлы и ввод/вывод.
Лекция 4. Строки, байты, файлы и ввод/вывод.
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?
 
Python и его тормоза
Python и его тормозаPython и его тормоза
Python и его тормоза
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассов
 

Viewers also liked

09 - Практика UML. Use Case диаграммы
09 - Практика UML. Use Case диаграммы09 - Практика UML. Use Case диаграммы
09 - Практика UML. Use Case диаграммы
Roman Brovko
 
01 - Практика UML. Нужен ли UML?
01 - Практика UML. Нужен ли UML?01 - Практика UML. Нужен ли UML?
01 - Практика UML. Нужен ли UML?
Roman Brovko
 
04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов
Roman Brovko
 
02 - Практика UML. Уровни приложения
02 - Практика UML. Уровни приложения02 - Практика UML. Уровни приложения
02 - Практика UML. Уровни приложения
Roman Brovko
 
03 - Практика UML. Прецеденты
03 - Практика UML. Прецеденты03 - Практика UML. Прецеденты
03 - Практика UML. Прецеденты
Roman Brovko
 
12 - Практика UML. Создание wireframe
12 - Практика UML. Создание wireframe12 - Практика UML. Создание wireframe
12 - Практика UML. Создание wireframe
Roman Brovko
 
13 - Практика UML. Переход к разработке
13 - Практика UML. Переход к разработке13 - Практика UML. Переход к разработке
13 - Практика UML. Переход к разработке
Roman Brovko
 

Viewers also liked (7)

09 - Практика UML. Use Case диаграммы
09 - Практика UML. Use Case диаграммы09 - Практика UML. Use Case диаграммы
09 - Практика UML. Use Case диаграммы
 
01 - Практика UML. Нужен ли UML?
01 - Практика UML. Нужен ли UML?01 - Практика UML. Нужен ли UML?
01 - Практика UML. Нужен ли UML?
 
04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов
 
02 - Практика UML. Уровни приложения
02 - Практика UML. Уровни приложения02 - Практика UML. Уровни приложения
02 - Практика UML. Уровни приложения
 
03 - Практика UML. Прецеденты
03 - Практика UML. Прецеденты03 - Практика UML. Прецеденты
03 - Практика UML. Прецеденты
 
12 - Практика UML. Создание wireframe
12 - Практика UML. Создание wireframe12 - Практика UML. Создание wireframe
12 - Практика UML. Создание wireframe
 
13 - Практика UML. Переход к разработке
13 - Практика UML. Переход к разработке13 - Практика UML. Переход к разработке
13 - Практика UML. Переход к разработке
 

Similar to Лекция 1. Начало.

ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
Python
PythonPython
Pythonpelid
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
luis_blanco_rau
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
Alexander Granin
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
Roman Dvornov
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
Levon Avakyan
 
2013 09 21 языки программирования
2013 09 21 языки программирования 2013 09 21 языки программирования
2013 09 21 языки программирования Yandex
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
Омские ИТ-субботники
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
it-people
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
About Python
About PythonAbout Python
About Python
Yury Yurevich
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
DefconRussia
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bashkuchinskaya
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Ontico
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
Andrey Karpov
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
Tatiana Volkova
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Yandex
 

Similar to Лекция 1. Начало. (20)

ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
Python
PythonPython
Python
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
2013 09 21 языки программирования
2013 09 21 языки программирования 2013 09 21 языки программирования
2013 09 21 языки программирования
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
About Python
About PythonAbout Python
About Python
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bash
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 

More from Roman Brovko

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
Roman Brovko
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
Roman Brovko
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
Roman Brovko
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
Roman Brovko
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
Roman Brovko
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
Roman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
Roman Brovko
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
Roman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
Roman Brovko
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
Roman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
Roman Brovko
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
Roman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
Roman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
Roman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
Roman Brovko
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
Roman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
Roman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
Roman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
Roman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
Roman Brovko
 

More from Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 

Лекция 1. Начало.

  • 1. Лекция 1: Начало Сергей Лебедев sergei.a.lebedev@gmail.com 7 сентября 2015 г.
  • 2. Логистика курса • n ≈ 10 лекций; • n − 1 домашних заданий • несколько задач, которые нужно решить на Python, • решения можно сдавать в течение недели после лекции без штрафа и в течение второй недели со штрафом 50%; • каждая задача оценивается максимум 4 баллами: по два за корректность и стилистику; • n − 1 тестов • несколько вопросов по материалам предыдущей лекции, • полностью правильный тест оценивается 4 баллами. 1 / 37
  • 3. Скучающий компьютерный ученый «[…] in December 1989, I was looking for a “hobby” programming project that would keep me occupied during the week around Christmas. My office […] would be closed, but I had a home computer, and not much else on my hands.» Foreword for “Programming Python” (1st ed.) 2 / 37
  • 4. Источники вдохновения ABC HOW TO RETURN words document: PUT {} IN collection FOR line IN document: FOR word IN split line: IF word not.in collection: INSERT word IN collection RETURN collection Modula-3 TRY DO.Something() EXCEPT | IO.Error => IO.Put("An I/O error occurred.") END; 3 / 37
  • 5. Цели и результаты1 • Хотелось простой, понятный, удобный и полезный язык с открытым исходным кодом. • Получилось def magic(dir): acc = [] for root, dirs, files in os.walk(dir): acc.extend(os.path.join(root, file) for file in files) return acc • Что делает функция magic? 1 https://www.python.org/doc/essays/cp4e 4 / 37
  • 6. Python — динамический интепретируемый язык >>> def add(x, y): ... return x + y ... >>> def bar(x): ... add(x, "1", "2") # не ошибка ... >>> add.__code__ = bar.__code__ >>> add(42) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in bar TypeError: bar() takes 1 positional argument but 3 [...] 5 / 37
  • 7. Python — динамический интепретируемый язык $ cat ./hello.py message = "Hello, world!" $ python -m dis ./hello.py 0 LOAD_CONST 0 ('Hello, world!') 3 STORE_NAME 0 (message) 6 LOAD_CONST 1 (None) 9 RETURN_VALUE 6 / 37
  • 9. Python 2000 и Python 30002 • Две несовместимых ветки языка: Python 2.X и Python 3.X. • Официально ветка 2.X в режиме поддержки, а 3.X — в режиме развития. • Мы будем использовать ветку 3.X. 2 http://vitaliypodoba.com/2014/05/python2-or-python3 8 / 37
  • 11. Основные идеи языка: файл, модуль, пространство имён >>> import hello >>> hello <module 'hello' from '[...]/hello.py'> >>> dir(hello) ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'message'] >>> hello.__name__, hello.__file__ ('hello', '[...]/hello.py') >>> print(hello.message) "Hello, world!" 9 / 37
  • 12. Основные идеи языка: отступы вместо скобочек >>> while True: ... print(42) File "<stdin>", line 2 print(42) ^ IndentationError: expected an indented block 10 / 37
  • 13. Основные идеи языка: всё есть объект >>> import hello >>> type(hello) <class 'module'> >>> type(type(hello)) <class 'type'> >>> type(type(type(hello))) <class 'type'> 11 / 37
  • 15. Основные типы языка: странные и логические Странные >>> None >>> None == None True >>> None is None True Логические >>> to_be = False >>> to_be or not to_be True >>> True or print(None) # ленивый оператор True >>> 42 + True 43 12 / 37
  • 16. Основные типы языка: числовые >>> 42 # int 42 >>> .42 # float 0.42 >>> 42j # complex 42j >>> 42**24 # приведение к длинному числу 907784931546351634835748413459499319296 >>> 16 / 3 # приведение к числу с плавающей точкой 5.333333333333333 >>> 16 // 3 5 >>> 16 % 3 1 13 / 37
  • 17. Основные типы языка: строковые >>> b"foo" b'foo' >>> b"foo".decode("utf-8") 'foo' >>> "bar" 'bar' >>> bar = "bar" >>> len(bar) 3 >>> bar[0] 'b' >>> s = "." * 10 >>> s '..........' >>> "<>" + s + "<" '<>..........<' >>> " foo bar ".strip() 'foo bar' 14 / 37
  • 18. Основные типы языка: список >>> [] # или list() [] >>> [0] * 4 [0, 0, 0, 0] >>> >>> xs = [1, 2, 3, 4] >>> len(xs) 4 >>> xs[0] 1 >>> xs[0] = -1 >>> xs [-1, 2, 3, 4] >>> xs.append(42) [-1, 2, 3, 4, 42] >>> del xs[0] # или xs.pop(0) [2, 3, 4, 42] 15 / 37
  • 19. Основные типы языка: конкатенация и слайсы Конкатенация >>> xs = [1, 2, 3, 4] >>> xs + [5, 6] [1, 2, 3, 4, 5, 6] >>> ", ".join(["foo", "bar"]) 'foo, bar' Слайсы >>> xs = [1, 2, 3, 4] >>> xs[:2] [1, 2] >>> xs[2:] [3, 4] >>> xs[1:3] [2, 3] >>> xs[0:4:2] [1, 3] >>> xs[:] [1, 2, 3, 4] >>> s = "foobar" >>> s[:2] 'fo' >>> s[2:] 'obar' >>> s[1:3] 'oo' >>> s[0:4:2] 'fo' >>> s[:] 'foobar' 16 / 37
  • 20. Основные типы языка: кортеж >>> tuple() # неизменяемый () >>> date = ("year", 2015) ('year', 2015) >>> len(date) 2 >>> date[1] = 2016 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> del date[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object doesn't support item deletion 17 / 37
  • 21. Основные типы языка: множество >>> set() # хеш-сет set() >>> xs = {1, 2, 3, 4} >>> 42 in xs False >>> 42 not in xs True >>> xs.add(42) # {1, 2, 3, 4, 42} >>> xs.discard(42) # {1, 2, 3, 4} Капитан сообщает Операторы in и not in работают для всех контейнеров: >>> 42 in [1, 2, 3, 4] False >>> "month" not in ("year", 2015) True 18 / 37
  • 22. Основные типы языка: операции над множествами >>> xs = {1, 2, 3, 4} >>> ys = {4, 5} >>> xs.intersection(ys) {4} >>> xs & ys {4} >>> xs.union(ys) {1, 2, 3, 4, 5} >>> xs | ys {1, 2, 3, 4, 5} >>> xs.difference(ys) {1, 2, 3} >>> xs - ys {1, 2, 3} 19 / 37
  • 23. Основные типы языка: словарь >>> {} # или dict(), хеш-таблица {} >>> date = {"year": 2015, "month": "September"} >>> len(date) 2 >>> date["year"] 2015 >>> date.get("day", 7) 7 >>> date["year"] = 2016 >>> date {'month': 'September', 'year': 2016} >>> del date["year"] # или date.pop("year") {'month': 'Semptember'} Вопрос Как проверить наличие элемента в словаре? 20 / 37
  • 24. Основные типы языка: ключи и значения >>> date = {"year": 2015, "month": "September"} >>> date.keys() dict_keys(['month', 'year']) >>> date.values() dict_values(['September', 2015]) >>> date.items() dict_items([('month', 'September'), ('year', 2015)]) >>> other_date = {"month": "October", "day": 24} >>> date.keys() + other_date.keys() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: [...] >>> date.keys() | other_date.keys() {'date', 'month', 'year'} 21 / 37
  • 25. Основные типы языка: резюме • Базовых типов не очень много: • None; • логические True, False; • числовые int, float, complex; • строковые bytes, str; • изменяемые коллекции list, set, dict, • неизменяемые коллекции tuple. • Чаще всего над объектами из одной группы можно совершить конкретное действие одним очевидным способом: >>> 1 + 1 >>> 1. + 1. >>> 1j + 1j >>> b"p" + b"y" b'py' >>> "p" + "y" 'py >>> 42 in {42} >>> 42 in [42] >>> 42 in {42: "..."} 22 / 37
  • 27. Основные конструкции языка: if >>> x = 42 >>> if x % 5 == 0: ... print("fizz") ... elif x % 3 == 0: ... print("buzz") ... else: ... pass # необязательная ветка ... buzz Тернарный оператор >>> "even" if x % 2 == 0 else "odd" 'even' Мотивацию для такого решения Гвидо можно прочитать в архивах рассылки python-dev3. 3 http://bit.ly/python-dev-ifthen 23 / 37
  • 28. Основные конструкции языка: while и for >>> i = 0 >>> while i < 10: ... i += 1 ... >>> i 10 >>> sum = 0 >>> for i in range(1, 5): ... sum += i * i ... >>> sum 30 Капитан сообщает В Python есть операторы break и continue, которые работают ≈ также как и в других императивных языках. >>> while False: ... pass ... else: ... print("What on earth is this?") ... What on earth is this? 24 / 37
  • 29. Основные конструкции языка: range и reversed range Принимает три аргумента: начало полуинтервала, конец полуинтервала и опциональный аргумент — шаг, который может быть отрицательным. >>> range(0, 5, 2) range(0, 5, 2) >>> list(range(0, 5, 2)) [0, 2, 4] >>> list(range(4, -1, -2)) [4, 2, 0] reversed Перечисляет элементы переданной ей последовательности в обратном порядке. >>> list(reversed([1, 2, 3])) [3, 2, 1] 25 / 37
  • 30. Основные конструкции языка: больше о for for можно использовать для итерации по коллекциям, файлам и вообще много чему. >>> for x in [0, 1, 1, 2, 3]: ... pass ... >>> for x in reversed([0, 1, 1, 2, 3]): ... pass ... >>> for line in open("./HBA1.txt"): ... pass ... >>> for ch in "abracadabra": ... pass 26 / 37
  • 31. Основные конструкции языка: резюме • В Python есть многое из того, что так дорого программисту на императивном языке: if, for, while, тернарный оператор. • В Python нет • фигурных скобок для обозначения области видимости, >>> from __future__ import braces File "<stdin>", line 1 SyntaxError: not a chance • циклов с пост-условием, потому что while вполне достаточно, • операторов switch и for с явным счетчиком, потому что они имеют нетривиальную семантику. 27 / 37
  • 32. Zen >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! 28 / 37
  • 34. IPython за 5 минут • IPython — более лучшая интерактивная оболочка для языка Python. • Она поддерживает: • интроспекцию и дополнение имён модулей, классов, методов, переменных, • работу с историей, • использование стандартных команд UNIX, например, ls, • систему “магических” команд %%magic. • Установить можно с помощью менеджера пакетов pip $ pip install "ipython[all]" 30 / 37
  • 35. IPython: интроспекция и дополнение In [1]: from builtins import di<TAB> dict dir divmod In [2]: d = {"foo": "bar"} In [3]: d.c<TAB> d.clear d.copy In [4]: def f(): ...: "I do nothing and return 42." ...: return 42 ...: In [5]: f? # вывод ?? также содержит исходный код. Type: function String form: <function f at 0x103d68ae8> File: ... Definition: f() Docstring: I do nothing and return 42. 31 / 37
  • 36. IPython: работа с историей # номер ячейки # | # v In [1]: [1, 2, 3] Out[1]: [1, 2, 3] In [2]: _[1:] # ссылка на предыдущую ячейку Out[2]: [2, 3] In [3]: __[1:] # ссылка на две ячейки назад Out[3]: [2, 3] In [4]: Out[2] == Out[3] # ссылка на ячейку по номеру Out[4]: True 32 / 37
  • 37. IPython: стандартные команды UNIX In [1]: pwd Out[1]: './cscenter/python' In [2]: ls lecture*.tex lecture-base.tex lecture01.tex In [3]: cd /tmp /tmp In [4]: !date Wed 2 Sep 2015 23:26:54 MSK In [5]: output = !date In [6]: output Out[6]: ['Wed 2 Sep 2015 23:27:08 MSK'] 33 / 37
  • 38. IPython: “магические” команды • “Магические” команды отвечают за магию. • Однострочные “магические” команды начинаются с символа %, многострочные — с %%. • Пример однострочной “магической” команды, которая позволяет отредактировать и вычислить содержимое ячейки с указанным номером: In [1]: def f(): ...: pass ...: In [2]: %edit 1 IPython will make a temporary file named: [...] done. Executing edited code... Out[2]: 'def f():n return 42n' In [3]: f() Out[3]: 42 34 / 37
  • 39. IPython: “магические” команды и автомагия • По умолчанию IPython работает в режиме %automagic, то есть префикс % у однострочных команд можно не писать. • Команды UNIX, которыми мы уже пользовались, — это “магические” команды IPython, вызванные без префикса %. • Пример многострочной “магической” команды, которая сохраняет содержимое ячейки в указанный файл: In [1]: %%writefile /tmp/example.py ...: def f(): ...: return 42 ...: Writing /tmp/example.py In [2]: %load /tmp/example.py In [4]: f() Out[4]: 42 35 / 37
  • 40. IPython: больше “магических” команд In [1]: env EDITOR Out[1]: 'nano' In [2]: env EDITOR=emacs env: EDITOR=emacs In [3]: %cpaste Pasting code; enter '--' alone on the line to stop : def f(): : return "I'm badly indented!" :-- In [4]: f() Out[4]: "I'm badly indented!" In [5]: %timeit sum(range(1000)) 10000 loops, best of 3: 25.1 µs per loop In [6]: %lsmagic # DIY. 36 / 37
  • 41. IPython: резюме • IPython — удобная и полезная альтернатива стандартной интерактивной оболочке Python. • Мы поговорили только про основы её использования. Больше информации можно найти на сайте: http://ipython.org. 37 / 37