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