Created
August 6, 2013 09:30
-
-
Save astynax/6163096 to your computer and use it in GitHub Desktop.
Решение домашнего задания по м/к о (func|iter)tools
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "xx-tools homework" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## \u041c\u043e\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434/\u0437" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## tee" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 **tee** \u0431\u0443\u0434\u0443 \u0442\u0430\u043a" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def test(realization_of_tee):\n", | |
" a, b = realization_of_tee(iter(xrange(10)))\n", | |
" b.next()\n", | |
" return zip(a, b)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f **tee** \u0441 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0439" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from collections import deque\n", | |
"\n", | |
"def tee1(iterable, n=2):\n", | |
" buffs = [deque() for _ in xrange(n)]\n", | |
" \n", | |
" def pull():\n", | |
" x = iterable.next()\n", | |
" for b in buffs:\n", | |
" b.appendleft(x)\n", | |
" \n", | |
" def worker(buff):\n", | |
" while True:\n", | |
" if not buff:\n", | |
" pull()\n", | |
" yield buff.pop()\n", | |
" \n", | |
" return map(worker, buffs)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print test(tee1)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]\n" | |
] | |
} | |
], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f **tee** \u0441 \u0435\u0434\u0438\u043d\u044b\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def tee2(iterable, n=2):\n", | |
" # \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439,\n", | |
" # \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0435\u0433\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\n", | |
" indexes = tuple(range(n))\n", | |
" \n", | |
" # \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438,\n", | |
" # \u0434\u0430\u0436\u0435 \u0432 \"\u0447\u0435\u0440\u043d\u043e\u0432\u043e\u043c\" \u043a\u043e\u0434\u0435\n", | |
" source = iter(iterable)\n", | |
"\n", | |
" buff = [] # \u0431\u0443\u0444\u0435\u0440 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442.\u043a. \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\n", | |
" positions = [0] * n # c immutable-\u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c\n", | |
" \n", | |
" def cleanup():\n", | |
" \"\"\"\n", | |
" \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0437 \u0445\u0432\u043e\u0441\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b,\n", | |
" \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u0441\u0435\u043c\u0438 \u043a\u0443\u0440\u0441\u043e\u0440\u0430\u043c\u0438\n", | |
" \"\"\"\n", | |
" min_pos = min(positions)\n", | |
" if min_pos > 0:\n", | |
" buff.pop(0)\n", | |
" for n in indexes:\n", | |
" positions[n] -= 1\n", | |
"\n", | |
" def pullup():\n", | |
" \"\"\"\n", | |
" \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439 \u043b\u0438\u0431\u043e \u0438\u0437 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433 \u0435\u0433\u043e \u0433\u043e\u043b\u043e\u0432\u044b\n", | |
" \"\"\"\n", | |
" max_pos = max(positions)\n", | |
" if max_pos >= len(buff):\n", | |
" buff.append(source.next())\n", | |
" \n", | |
" def worker(pos):\n", | |
" while True:\n", | |
" pullup()\n", | |
" yield buff[positions[pos]]\n", | |
" positions[pos] += 1\n", | |
" cleanup()\n", | |
" \n", | |
" return map(worker, indexes)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print test(tee2)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]\n" | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 :)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from itertools import tee\n", | |
"\n", | |
"test(tee) == test(tee1) == test(tee2)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 6, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### \u0423\u0440\u0430!" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## peekable" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0443 \u044d\u0442\u0438\u043c:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def test_peekable(realization, skip_tests=()):\n", | |
" \"\"\"\n", | |
" \u0422\u0435\u0441\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 peekable\n", | |
" @skip_tests - \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c\n", | |
" \"\"\"\n", | |
"\n", | |
" class Source(object):\n", | |
" u\"\"\"\n", | |
" \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435\n", | |
" \u0437\u0430\u043f\u0443\u0441\u043a, \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443\n", | |
" \"\"\"\n", | |
" def __init__(self):\n", | |
" self.started = False\n", | |
" self.iterated = False\n", | |
" self.stopped = False\n", | |
" self._value = 0\n", | |
"\n", | |
" def __iter__(self):\n", | |
" self.started = True\n", | |
" return self\n", | |
" \n", | |
" def next(self):\n", | |
" self._value += 1\n", | |
" if self._value >= 10:\n", | |
" self.stopped = True\n", | |
" raise StopIteration()\n", | |
" self.iterated = True\n", | |
" return self._value\n", | |
" \n", | |
" src = Source()\n", | |
" p = realization(src)\n", | |
"\n", | |
" if not 'SKIP_START' in skip_tests and (\n", | |
" src.started or src.iterated\n", | |
" ):\n", | |
" # \u0414\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438\n", | |
" # \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\n", | |
" print u\"\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438!\"\n", | |
" return\n", | |
" \n", | |
" p = iter(p)\n", | |
"\n", | |
" if not 'SKIP_NEXT' in skip_tests and (\n", | |
" src.iterated\n", | |
" ):\n", | |
" # \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f,\n", | |
" # \u043f\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f\n", | |
" print u\"\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u044b \u0434\u043e \u0437\u0430\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0443 \u043e\u0431\u0451\u0440\u0442\u043a\u0438!\"\n", | |
" return\n", | |
"\n", | |
" p.peek()\n", | |
"\n", | |
" if not 'SKIP_STOP' in skip_tests and (\n", | |
" src.stopped\n", | |
" ):\n", | |
" # \u042d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439,\n", | |
" # \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u0431\u0443\u0444\u0435\u0440, \u0438 \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0431\u0443\u0444\u0435\u0440\u0443\n", | |
" print u\"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0434\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u0431\u0451\u0440\u0442\u043a\u0435!\"\n", | |
" return\n", | |
" \n", | |
" result = []\n", | |
" for i in p:\n", | |
" result.append((i, p.peek(None)))\n", | |
"\n", | |
" if result != zip(range(1, 10), range(2, 10) + [None]):\n", | |
" print u\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043e\u0442\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e!\"\n", | |
" return\n", | |
" \n", | |
" return True\n" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f **peekable**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"class MyPeekable(object):\n", | |
" # \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u0417\u041f\u0423),\n", | |
" # \u0442.\u043a. None, \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0417\u041f\u0423\n", | |
" __NODEFAULT = (((),),)\n", | |
" \n", | |
" def __init__(self, iterable):\n", | |
" self._iterable = iterable\n", | |
" self._iterated = False\n", | |
" self._peeked = False\n", | |
" \n", | |
" def __iter__(self):\n", | |
" # \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438\n", | |
" if not self._iterated:\n", | |
" self._iterated = True\n", | |
" self._iterable = iter(self._iterable)\n", | |
" return self\n", | |
" \n", | |
" def peek(self, default=__NODEFAULT):\n", | |
" \"\"\"\n", | |
" \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430,\n", | |
" \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0442.\u0435. \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442\n", | |
" \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 next()\n", | |
"\n", | |
" \u0415\u0441\u043b\u0438 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f\n", | |
" \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e @default, \u0435\u043b\u0441\u0438 \u043e\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e,\n", | |
" \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 StopIteration\n", | |
" \"\"\"\n", | |
" if not self._peeked:\n", | |
" iter(self) # \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0431\u044f \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\n", | |
" try:\n", | |
" self._value = self._iterable.next()\n", | |
" except StopIteration:\n", | |
" if default is self.__NODEFAULT:\n", | |
" raise\n", | |
" return default\n", | |
" self._peeked = True\n", | |
" return self._value\n", | |
" \n", | |
" def next(self):\n", | |
" if not self._peeked:\n", | |
" self.peek()\n", | |
" self._peeked = False\n", | |
" return self._value" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"test_peekable(MyPeekable)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 9, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 9 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u044d\u0442\u0430\u043b\u043e\u043d" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from more_itertools import peekable\n", | |
"test_peekable(peekable)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438!\n" | |
] | |
} | |
], | |
"prompt_number": 10 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### \u0410-\u0445\u0430-\u0445\u0430! peekable, \u0447\u0442\u043e \u0442\u044b \u0434\u0435\u043b\u0430\u0435\u0448\u044c?! \u041f\u0440\u0435\u043a\u0440\u0430\u0442\u0438!\n", | |
"\n", | |
"\u042d\u0442\u0430\u043b\u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0440\u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438!\n", | |
"\n", | |
"\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"test_peekable(peekable, ('SKIP_START',))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 11, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 11 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### \u041d\u0443 \u0445\u043e\u0442\u044c \u0442\u0430\u043a :)" | |
] | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment