{ "metadata": { "name": "", "signature": "sha256:deab20a429b0ce5b40ffe86207fc2fe2d87b2ddd5861904afbf2609154ffefc7" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "***\n", "# 22. \uc57d\ud55c\ucc38\uc870, \ubc18\ubcf5\uc790, \ubc1c\uc0dd\uc790\n", "***\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 1 \uc57d\ud55c \ucc38\uc870\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-1 \uc57d\ud55c \ucc38\uc870\uc758 \uc815\uc758\n", "- \uc57d\ud55c \ucc38\uc870 (Weak Reference)\n", " - \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8\ub85c \uace0\ub824\ub418\uc9c0 \uc54a\ub294 \ucc38\uc870" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-2 \uc57d\ud55c \ucc38\uc870\uc758 \ud544\uc694\uc131" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![inheritance](images/cyclingref.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 1) \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8\uac00 \uc99d\uac00\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uc21c\ud658 \ucc38\uc870\uac00 \ubc29\uc9c0\ub41c\ub2e4.\n", " - \uc21c\ud658 \ucc38\uc870 (Cyclic Reference)\n", " - \uc11c\ub85c \ub2e4\ub978 \uac1d\uccb4\ub4e4 \uc0ac\uc774\uc5d0 \ucc38\uc870 \ubc29\uc2dd\uc774 \uc21c\ud658 \ud615\ud0dc\ub85c \uc5f0\uacb0\ub418\ub294 \ubc29\uc2dd\n", " - \ub3c5\ub9bd\uc801\uc73c\ub85c \uc874\uc7ac\ud558\uc9c0\ub9cc \uc21c\ud658 \ucc38\uc870\ub418\ub294 \uc11c\ub85c \ub2e4\ub978 \uac1d\uccb4 \uadf8\ub8f9\uc740 \uc4f0\ub808\uae30 \uc218\uc9d1\uc774 \uc548\ub41c\ub2e4.\n", " - \uc8fc\uae30\uc801\uc73c\ub85c \uc21c\ud658 \ucc38\uc870\ub97c \uc870\uc0ac\ud558\uc5ec \uc4f0\ub808\uae30 \uc218\uc9d1\ud558\ub294 \uae30\ub2a5\uc774 \uc788\uc9c0\ub9cc, CPU \uc790\uc6d0 \ub0ad\ube44\uac00 \uc2ec\ud558\ub2e4.\n", " - \uc774\ub7ec\ud55c \uc4f0\ub808\uae30 \uc218\uc9d1 \ube48\ub3c4\uac00 \ub0ae\uc73c\uba74 \uc21c\ud658 \ucc38\uc870\ub418\ub294 \ub9ce\uc740 \uac1d\uccb4\ub4e4\uc774 \uba54\ubaa8\ub9ac\ub97c \uc4f8\ub370\uc5c6\uc774 \uc810\uc720\ud558\uac8c \ub428\n", "- 2) \ub2e4\uc591\ud55c \uc778\uc2a4\ud134\uc2a4\ub4e4 \uc0ac\uc774\uc5d0\uc11c \uacf5\uc720\ub418\ub294 \uac1d\uccb4\uc5d0 \ub300\ud55c \uc77c\uc885\uc758 \ucf00\uc2dc(Cache)\ub97c \ub9cc\ub4dc\ub294 \ub370 \ud65c\uc6a9\ub41c\ub2e4." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-3 \uc57d\ud55c \ucc38\uc870 \ubaa8\ub4c8\n", "#### 1) weakref.ref(o)\n", "- weakref \ubaa8\ub4c8\uc758 ref(o) \ud568\uc218\n", " - \uac1d\uccb4 o\uc5d0 \ub300\ud55c \uc57d\ud55c \ucc38\uc870\ub97c \uc0dd\uc131\ud55c\ub2e4.\n", " - \ud574\ub2f9 \uac1d\uccb4\uac00 \uba54\ubaa8\ub9ac\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \ub0a8\uc544 \uc788\ub294\uc9c0 \uc870\uc0ac\ud55c\ub2e4.\n", " - \uac1d\uccb4\uac00 \uba54\ubaa8\ub9ac\uc5d0 \ub0a8\uc544 \uc788\uc9c0 \uc54a\uc73c\uba74 None\uc744 \ubc18\ud658\ud55c\ub2e4.\n", "\n", "- \uc57d\ud55c \ucc38\uc870\ub85c \ubd80\ud130 \uc2e4\uc81c \uac1d\uccb4\ub97c \ucc38\uc870\ud558\ub294 \ubc29\ubc95\n", " - \uc57d\ud55c \ucc38\uc870 \uac1d\uccb4\uc5d0 \ud568\uc218\ud615\ud0dc \ud638\ucd9c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sys\n", "import weakref # weakref \ubaa8\ub4c8 \uc784\ud3ec\ud2b8\n", "class C:\n", " pass\n", "c = C() # \ud074\ub798\uc2a4 C\uc758 \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \n", "c.a = 1 # \uc778\uc2a4\ud134\uc2a4 c\uc5d0 \ud14c\uc2a4\ud2b8\uc6a9 \uac12 \uc124\uc815 \n", "print \"refcount -\", sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c\n", "print\n", "\n", "d = c # \uc77c\ubc18\uc801\uc778 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc99d\uac00 \ubc29\ubc95\n", "print \"refcount -\", sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c\n", "print \n", "\n", "r = weakref.ref(c) # \uc57d\ud55c \ucc38\uc870 \uac1d\uccb4 r \uc0dd\uc131\n", "print \"refcount -\", sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c --> \uce74\uc6b4\ud2b8 \ubd88\ubcc0\n", "print" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "refcount - 2\n", "\n", "refcount - 3\n", "\n", "refcount - 3\n", "\n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "print r # \uc57d\ud55c \ucc38\uc870(weakref) \uac1d\uccb4\n", "print r() # \uc57d\ud55c \ucc38\uc870\ub85c \ubd80\ud130 \uc2e4\uc81c \uac1d\uccb4\ub97c \ucc38\uc870\ud558\ub294 \ubc29\ubc95: \uc57d\ud55c \ucc38\uc870 \uac1d\uccb4\uc5d0 \ud568\uc218\ud615\ud0dc\ub85c \ud638\ucd9c\n", "print c \n", "print r().a # \uc57d\ud55c \ucc38\uc870\ub97c \uc774\uc6a9\ud55c \uc2e4\uc81c \uac1d\uccb4 \uba64\ubc84 \ucc38\uc870\n", "print \n", "\n", "del c # \uac1d\uccb4 \uc81c\uac70\n", "del d\n", "print r() # None\uc744 \ub9ac\ud134\ud55c\ub2e4\n", "print r().a # \uc18d\uc131\ub3c4 \ucc38\uc870\ud560 \uc218 \uc5c6\ub2e4" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "<__main__.C instance at 0x10d893830>\n", "<__main__.C instance at 0x10d893830>\n", "1\n", "\n", "None\n" ] }, { "ename": "AttributeError", "evalue": "'NoneType' object has no attribute 'a'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# None\uc744 \ub9ac\ud134\ud55c\ub2e4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ma\u001b[0m \u001b[0;31m# \uc18d\uc131\ub3c4 \ucc38\uc870\ud560 \uc218 \uc5c6\ub2e4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'a'" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub0b4\uc7a5 \uc790\ub8cc\ud615 \uac1d\uccb4 (\ub9ac\uc2a4\ud2b8, \ud29c\ud50c, \uc0ac\uc804 \ub4f1)\uc5d0 \ub300\ud574\uc11c\ub294 \uc57d\ud55c \ucc38\uc870\ub97c \ub9cc\ub4e4 \uc218 \uc5c6\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "d = {'one': 1, 'two': 2}\n", "wd = weakref.ref(d)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "cannot create weak reference to 'dict' object", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0md\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'one'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'two'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mwd\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mweakref\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mref\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: cannot create weak reference to 'dict' object" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2) weakref.proxy(o)\n", "- weakref\uc758 proxy(o)\ub294 \uac1d\uccb4 o\uc5d0 \ub300\ud55c \uc57d\ud55c \ucc38\uc870 \ud504\ub85d\uc2dc\ub97c \uc0dd\uc131\ud55c\ub2e4.\n", " - \ud504\ub85d\uc2dc\ub97c \uc774\uc6a9\ud558\uba74 \ud568\uc218 \ud615\uc2dd\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc544\ub3c4 \uc2e4\uc81c \uac1d\uccb4\ub97c \ubc14\ub85c \ucc38\uc870\ud560 \uc218 \uc788\ub2e4.\n", " - ref(o) \ud568\uc218\ubcf4\ub2e4 \ub354 \uc120\ud638\ub418\ub294 \ud568\uc218" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sys\n", "import weakref\n", "class C:\n", " pass\n", "\n", "c = C()\n", "c.a = 2\n", "print \"refcount -\", sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c\n", "p = weakref.proxy(c) # \ud504\ub85d\uc2dc \uac1d\uccb4\ub97c \ub9cc\ub4e0\ub2e4\n", "print \"refcount -\", sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c --> \uce74\uc6b4\ud2b8 \ubd88\ubcc0\n", "print \n", "print p\n", "print c\n", "print p.a" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "refcount - 2\n", "refcount - 2\n", "\n", "<__main__.C instance at 0x10d8a9998>\n", "<__main__.C instance at 0x10d8a9998>\n", "2\n" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "import weakref\n", "class C:\n", " pass\n", "\n", "c = C() # \ucc38\uc870\ud560 \uac1d\uccb4 \uc0dd\uc131\n", "r = weakref.ref(c) # weakref \uc0dd\uc131\n", "p = weakref.proxy(c) # weakref \ud504\ub85d\uc2dc \uc0dd\uc131\n", "print weakref.getweakrefcount(c) # weakref \uac1c\uc218 \uc870\ud68c\n", "print weakref.getweakrefs(c) # weakref \ubaa9\ub85d \uc870\ud68c" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "[, ]\n" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-4 \uc57d\ud55c \uc0ac\uc804\n", "- \uc57d\ud55c \uc0ac\uc804 (Weak Dictionary)\n", " - \uc0ac\uc804\uc758 \ud0a4(key)\ub098 \uac12(value)\uc73c\ub85c \ub2e4\ub978 \uac1d\uccb4\ub4e4\uc5d0 \ub300\ud55c \uc57d\ud55c \ucc38\uc870\ub97c \uc9c0\ub2c8\ub294 \uc0ac\uc804\n", " - \uc8fc\ub85c \ub2e4\ub978 \uac1d\uccb4\ub4e4\uc5d0 \ub300\ud55c \uce90\uc2dc(Cache)\ub85c \ud65c\uc6a9\n", " - \uc77c\ubc18\uc801\uc778 \uc0ac\uc804\uacfc\uc758 \ucc28\uc774\uc810\n", " - \ud0a4(key)\ub098 \uac12(value)\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \uac1d\uccb4\ub294 \uc57d\ud55c \ucc38\uc870\ub97c \uc9c0\ub2cc\ub2e4.\n", " - \uc2e4\uc81c \uac1d\uccb4\uac00 \uc0ad\uc81c\ub418\uba74 \uc790\ub3d9\uc801\uc73c\ub85c \uc57d\ud55c \uc0ac\uc804\uc5d0 \uc788\ub294 (\ud0a4, \uac12)\uc758 \uc30d\ub3c4 \uc0ad\uc81c\ub41c\ub2e4.\n", " - \uc989, \uc2e4\uc81c \uac1d\uccb4\uac00 \uc0ac\ub77c\uc9c0\uba74 \uce90\uc2dc\uc5ed\ud560\uc744 \ud558\ub294 \uc57d\ud55c \uc0ac\uc804\uc5d0\uc11c\ub3c4 \ud574\ub2f9 \uc544\uc774\ud15c\uc774 \uc81c\uac70\ub418\ubbc0\ub85c \ud6a8\uc728\uc801\uc778 \uac1d\uccb4 \uc18c\uba78 \uad00\ub9ac\uac00 \uac00\ub2a5\ud558\ub2e4. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- weakref \ubaa8\ub4c8\uc758 WeakValueDictionary \ud074\ub798\uc2a4\n", " - weakref \ubaa8\ub4c8\uc758 WeakValueDictionary \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\ub294 \uc57d\ud55c \uc0ac\uc804\uc744 \uc0dd\uc131\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import weakref\n", "class C:\n", " pass\n", "\n", "c = C()\n", "c.a = 4\n", "d = weakref.WeakValueDictionary() # WeakValueDictionary \uac1d\uccb4 \uc0dd\uc131\n", "print d\n", "\n", "d[1] = c # \uc2e4\uc81c \uac1d\uccb4\uc5d0 \ub300\ud55c \uc57d\ud55c \ucc38\uc870 \uc544\uc774\ud15c \uc0dd\uc131\n", "print d.items() # \uc0ac\uc804 \ub0b4\uc6a9 \ud655\uc778\n", "print d[1].a # \uc2e4\uc81c \uac1d\uccb4\uc758 \uc18d\uc131 \ucc38\uc870\n", "\n", "del c # \uc2e4\uc81c \uac1d\uccb4 \uc0ad\uc81c\n", "print d.items() # \uc57d\ud55c \uc0ac\uc804\uc5d0 \ud574\ub2f9 \uac1d\uccb4 \uc544\uc774\ud15c\ub3c4 \uc81c\uac70\ub418\uc5b4 \uc788\uc74c" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "[(1, <__main__.C instance at 0x10dccad40>)]\n", "4\n", "[]\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc77c\ubc18 \uc0ac\uc804\uc744 \ud1b5\ud558\uc5ec \ub3d9\uc77c\ud55c \uc608\uc81c\ub97c \uc218\ud589\ud558\uba74 \ub9c8\uc9c0\ub9c9\uc5d0 \ud574\ub2f9 \uac1d\uccb4\ub97c \uc0ad\uc81c\ud574\ub3c4 \uc77c\ubc18 \uc0ac\uc804 \ub0b4\uc5d0\uc11c\ub294 \uc5ec\uc804\ud788 \uc874\uc7ac\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class C:\n", " pass\n", "\n", "c = C()\n", "c.a = 4\n", "d = {} # \uc77c\ubc18 \uc0ac\uc804 \uac1d\uccb4 \uc0dd\uc131\n", "print d\n", "\n", "d[1] = c # \uc2e4\uc81c \uac1d\uccb4\uc5d0 \ub300\ud55c \uc77c\ubc18 \ucc38\uc870 \uc544\uc774\ud15c \uc0dd\uc131\n", "print d.items() # \uc0ac\uc804 \ub0b4\uc6a9 \ud655\uc778\n", "print d[1].a # \uc2e4\uc81c \uac1d\uccb4\uc758 \uc18d\uc131 \ucc38\uc870\n", "\n", "del c # \uac1d\uccb4 \uc0ad\uc81c (\uc0ac\uc804\uc5d0 \ud574\ub2f9 \uac1d\uccb4\uc758 \ub808\ud37c\ub7f0\uc2a4\uac00 \uc788\uc73c\ubbc0\ub85c \uac1d\uccb4\ub294 \uc2e4\uc81c\ub85c \uba54\ubaa8\ub9ac \ud574\uc81c\ub418\uc9c0 \uc54a\uc74c)\n", "print d.items() # \uc77c\ubc18 \uc0ac\uc804\uc5d0 \ud574\ub2f9 \uac1d\uccb4 \uc544\uc774\ud15c\uc774 \uc5ec\uc804\ud788 \ub0a8\uc544 \uc788\uc74c" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{}\n", "[(1, <__main__.C instance at 0x10d893878>)]\n", "4\n", "[(1, <__main__.C instance at 0x10d893878>)]\n" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 2 \ubc18\ubcf5\uc790\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-1 \ubc18\ubcf5\uc790 \uac1d\uccb4\n", "- \ubc18\ubcf5\uc790 \uac1d\uccb4\n", " - next() \uba54\uc18c\ub4dc\ub97c \uc9c0\ub2c8\uace0 \uc788\ub294 \uac1d\uccb4\n", " - next() \uba54\uc18c\ub4dc\ub85c \ub354 \uc774\uc0c1 \uc790\ub8cc\ub97c \ub150\uaca8\uc904 \uc218 \uc5c6\uc744 \ub54c StopIteration \uc608\uc678\uac00 \ubc1c\uc0dd\ud55c\ub2e4.\n", "- \ubc18\ubcf5\uc790 \uac1d\uccb4 \uc0dd\uc131 \ubc29\ubc95\n", " - iter(o) \ub0b4\uc7a5 \ud568\uc218\n", " - \uac1d\uccb4 o\uc758 \ubc18\ubcf5\uc790 \uac1d\uccb4\ub97c \ubc18\ud658\ud55c\ub2e4.\n", "- \ubc18\ubcf5\uc790 \uac1d\uccb4\uc758 \ud6a8\uc728\uc131\n", " - \ubc18\ubcf5\uc790\uac00 \uc6d0 \uac1d\uccb4\uc758 \uc6d0\uc18c\ub4e4\uc744 \ubcf5\uc0ac\ud558\uc5ec \uc9c0\ub2c8\uace0 \uc788\uc9c0 \uc54a\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "I = iter([1,2,3])\n", "print I\n", "\n", "print I.next()\n", "print I.next()\n", "print I.next()\n", "print I.next()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1\n", "2\n", "3\n" ] }, { "ename": "StopIteration", "evalue": "", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mStopIteration\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mI\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mI\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mI\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mStopIteration\u001b[0m: " ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub9ac\uc2a4\ud2b8 \uac1d\uccb4\uc5d0 \ub300\ud574 \uc77c\ubc18\uc801\uc778 for ~ in \ubc18\ubcf5 \ubb38 \uc0ac\uc6a9\uc608" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " print x + 1\n", "\n", "for x in [1,2,3]:\n", " f(x)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "4\n" ] } ], "prompt_number": 53 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub9ac\uc2a4\ud2b8 \uac1d\uccb4\uc5d0 \ubc18\ubcf5\uc790\ub97c \ud65c\uc6a9\ud55c \uc608" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " print x + 1\n", "\n", "t = iter([1,2,3])\n", "while 1:\n", " try:\n", " x = t.next()\n", " except StopIteration:\n", " break\n", " f(x)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "4\n" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- for ~ in \uad6c\ubb38\uc5d0 \ubc18\ubcf5\uc790\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.\n", " - for \ubb38\uc774 \ub3cc\ub54c \ub9c8\ub2e4 \ubc18\ubcf5\uc790 \uac1d\uccb4\uc758 next() \ud568\uc218\uac00 \uc790\ub3d9\uc73c\ub85c \ud638\ucd9c\ub418\uc5b4 \uc21c\ucc28\uc801\uc73c\ub85c \uac01 \uac1d\uccb4\uc5d0 \uc811\uadfc \uac00\ub2a5\ud558\ub2e4.\n", " - StopIteration\uc774 \ubc1c\uc0dd\ud558\uba74 for ~ in \uad6c\ubb38\uc774 \uba48\ucd98\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " print x + 1\n", "\n", "t = iter([1,2,3])\n", "for x in t:\n", " f(x)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "4\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " print x + 1\n", "\n", "for x in iter([1,2,3]):\n", " f(x)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "4\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " print x + 1\n", "\n", "for x in iter((1,2,3)):\n", " f(x)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "4\n" ] } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-2 \ud074\ub798\uc2a4\uc5d0 \ubc18\ubcf5\uc790 \uad6c\ud604\ud558\uae30" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub0b4\uc7a5 \ud568\uc218 iter(o)\uc5d0 \ub300\uc751\ub418\ub294 \\_\\_iter\\_\\_(self)\uc758 \uad6c\ud604 \n", " - \uac1d\uccb4 o\uc5d0 iter(o)\ub97c \ud638\ucd9c\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \\_\\_iter\\_\\_(self) \ud568\uc218 \ud638\ucd9c\n", " - \\_\\_iter\\_\\_(self) \ud568\uc218\ub294 next() \ud568\uc218\ub97c \uc9c0\ub2cc \ubc18\ubcf5\uc790 \uac1d\uccb4\ub97c \ubc18\ud658\ud574\uc57c \ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Seq:\n", " def __init__(self, fname):\n", " self.file = open(fname)\n", " #def __getitem__(self, n):\n", " # if n == 10:\n", " # raise StopIteration\n", " # return n\n", " def __iter__(self):\n", " return self\n", " def next(self):\n", " line = self.file.readline() # \ud55c \ub77c\uc778\uc744 \uc77d\ub294\ub2e4.\n", " if not line: \n", " raise StopIteration # \uc77d\uc744 \uc218 \uc5c6\uc73c\uba74 \uc608\uc678 \ubc1c\uc0dd\n", " return line # \uc77d\uc740 \ub77c\uc778\uc744 \ub9ac\ud134\ud55c\ub2e4.\n", " \n", "s = Seq('readme.txt') # s \uc778\uc2a4\ud134\uc2a4\uac00 next() \uba54\uc18c\ub4dc\ub97c \uc9c0\ub2c8\uace0 \uc788\uc73c\ubbc0\ub85c s \uc778\uc2a4\ud134\uc2a4 \uc790\uccb4\uac00 \ubc18\ubcf5\uc790\uc784 \n", "for line in s: # \uc6b0\uc120 __iter__() \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud558\uc5ec \ubc18\ubcf5\uc790\ub97c \uc5bb\uace0, \ubc18\ubcf5\uc790\uc5d0 \ub300\ud574\uc11c for ~ in \uad6c\ubb38\uc5d0 \uc758\ud558\uc5ec next() \uba54\uc18c\ub4dc\uac00 \ud638\ucd9c\ub428\n", " print line,\n", "\n", "print \n", "\n", "print Seq('readme.txt')\n", "\n", "print list(Seq('readme.txt')) # list() \ub0b4\uc7a5 \ud568\uc218\uac00 \uac1d\uccb4\ub97c \uc778\uc218\ub85c \ubc1b\uc73c\uba74 \ud574\ub2f9 \uac1d\uccb4\uc758 \ubc18\ubcf5\uc790\ub97c \uc5bb\uc5b4\uc640 next()\ub97c \ub9e4\ubc88 \ud638\ucd9c\ud558\uc5ec \uac01 \uc6d0\uc18c\ub97c \uc5bb\uc5b4\uc628\ub2e4. \n", "print tuple(Seq('readme.txt')) # tuple() \ub0b4\uc7a5 \ud568\uc218\uac00 \uac1d\uccb4\ub97c \uc778\uc218\ub85c \ubc1b\uc73c\uba74 \ud574\ub2f9 \uac1d\uccb4\uc758 \ubc18\ubcf5\uc790\ub97c \uc5bb\uc5b4\uc640 next()\ub97c \ub9e4\ubc88 \ud638\ucd9c\ud558\uc5ec \uac01 \uc6d0\uc18c\ub97c \uc5bb\uc5b4\uc628\ub2e4. " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "abc\n", "def\n", "ghi\n", "\n", "<__main__.Seq instance at 0x10ddc5680>\n", "['abc\\n', 'def\\n', 'ghi\\n']\n", "('abc\\n', 'def\\n', 'ghi\\n')\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-3 \uc0ac\uc804\uc758 \ubc18\ubcf5\uc790" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc0ac\uc804\uc5d0 \ub300\ud574 for ~ in \uad6c\ubb38\uc740 \ud0a4\uc5d0 \ub300\ud574 \ubc18\ubcf5\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "d = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5}\n", "for key in d:\n", " print key, d[key]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "four 4\n", "three 3\n", "five 5\n", "two 2\n", "one 1\n" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "d = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5}\n", "for key in iter(d):\n", " print key, d[key]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "four 4\n", "three 3\n", "five 5\n", "two 2\n", "one 1\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- d.iterkeys() \ud568\uc218\n", " - \uc0ac\uc804 d\uac00 \uc9c0\ub2cc \ud0a4\uc5d0 \ub300\ud55c \ubc18\ubcf5\uc790 \uac1d\uccb4\ub97c \ubc18\ud658\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "for key in d.iterkeys(): # \ud0a4\uc5d0 \ub300\ud55c \ubc18\ubcf5\uc790, d.iterkeys() \uac00 \ubc18\ud658\ud55c \ubc18\ubcf5\uc790\uc5d0 \ub300\ud574 next() \ud568\uc218\uac00 \uc21c\ucc28\uc801\uc73c\ub85c \ubd88\ub9ac\uc6cc\uc9d0\n", " print key," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "four three five two one\n" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "keyset = d.iterkeys()\n", "print keyset.next() # \ubc18\ubcf5\uc790 \uac1d\uccb4\ub294 \ud56d\uc0c1 next() \uba54\uc18c\ub4dc\ub97c \uc9c0\ub2c8\uace0 \uc788\uc74c\n", "for key in keyset: # keyset \ubc18\ubcf5\uc790\uc5d0 \ub300\ud574 next() \uba54\uc18c\ub4dc\uac00 \uc21c\ucc28\uc801\uc73c\ub85c \ud638\ucd9c\ub428\n", " print key," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "four\n", "three five two one\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- d.itervalues() \ud568\uc218\n", " - \uc0ac\uc804 d\uac00 \uc9c0\ub2cc \uac12\uc5d0 \ub300\ud55c \ubc18\ubcf5\uc790 \uac1d\uccb4\ub97c \ubc18\ud658\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "for value in d.itervalues(): # \uac12\uc5d0 \ub300\ud55c \ubc18\ubcf5\uc790\n", " print value, " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4 3 5 2 1\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- d.iteritems() \ud568\uc218\n", " - \uc0ac\uc804 d\uc758 \uac01 \uc544\uc774\ud15c\uc5d0 \ub300\ud55c \ubc18\ubcf5\uc790 \uac1d\uccb4\ub97c \ubc18\ud658\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "for key, value in d.iteritems(): #(\ud0a4,\uac12)\uc5d0 \ub300\ud55c \ubc18\ubcf5\uc790\n", " print key, value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "four 4\n", "three 3\n", "five 5\n", "two 2\n", "one 1\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-4 \ud30c\uc77c \uac1d\uccb4\uc758 \ubc18\ubcf5\uc790" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud30c\uc77c \uac1d\uccb4\ub294 \uadf8 \uc790\uccb4\uac00 \ubc18\ubcf5\uc790\uc784\n", " - next() \ud568\uc218\uc5d0 \uc758\ud574 \uac01 \ub77c\uc778\uc774 \uc21c\ucc28\uc801\uc73c\ub85c \uc77d\ud600\uc9d0" ] }, { "cell_type": "code", "collapsed": false, "input": [ "f = open('readme.txt')\n", "print \"f.next()\", f.next()\n", "for line in f: # f.next() \uac00 \uc21c\ucc28\uc801\uc73c\ub85c \ud638\ucd9c\ub428\n", " print line, " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "f.next() 1: Hello World\n", "\n", "2: Hello World\n", "3: Hello World\n", "4: Hello World\n", "5: Hello World\n" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 3 \ubc1c\uc0dd\uc790\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-1 \ubc1c\uc0dd\uc790\ub780?\n", "- \ubc1c\uc0dd\uc790(Generator)\n", " - (\uc911\ub2e8\ub428 \uc2dc\uc810\ubd80\ud130) \uc7ac\uc2e4\ud589 \uac00\ub2a5\ud55c \ud568\uc218\n", " \n", "- \uc544\ub798 \ud568\uc218 f()\ub294 \uc790\uc2e0\uc758 \uc778\uc218 \ubc0f \ub0b4\ubd80 \ubcc0\uc218\ub85c\uc11c a, b, c, d\ub97c \uc9c0\ub2c8\uace0 \uc788\ub2e4.\n", " - \uc774\ub7ec\ud55c a, b, c, d \ubcc0\uc218\ub4e4\uc740 \ud568\uc218\uac00 \uc885\ub8cc\ub418\uace0 \ubc18\ud658\ub420 \ub54c \ubaa8\ub450 \uc0ac\ub77c\uc9c4\ub2e4.\n", "- \ubc1c\uc0dd\uc790\ub294 f()\uc640 \uac19\uc774 \ud568\uc218\uac00 \uc885\ub8cc\ub420 \ub54c \uba54\ubaa8\ub9ac\uc5d0\uc11c \ud574\uc81c\ub418\ub294 \uac83\uc744 \ub9c9\uace0 \ub2e4\uc2dc \ud568\uc218\uac00 \ud638\ucd9c \ub420 \ub54c \uc774\uc804\uc5d0 \uc218\ud589\uc774 \uc885\ub8cc\ub418\uc5c8\ub358 \uc9c0\uc810 \ubd80\ud130 \uacc4\uc18d \uc218\ud589\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uad6c\ud604\ub41c \ud568\uc218\uc774\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(a,b):\n", " c = a * b\n", " d = a + b\n", " return c, d" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- yield \ud0a4\uc6cc\ub4dc\n", " - return \ub300\uc2e0\uc5d0 yield\uc5d0 \uc758\ud574 \uac12\uc744 \ubc18\ud658\ud558\ub294 \ud568\uc218\ub294 \ubc1c\uc0dd\uc790\uc774\ub2e4.\n", " - yield\ub294 return\uacfc \uc720\uc0ac\ud558\uac8c \uc784\uc758\uc758 \uac12\uc744 \ubc18\ud658\ud558\uc9c0\ub9cc \ud568\uc218\uc758 \uc2e4\ud589 \uc0c1\ud0dc\ub97c \ubcf4\uc874\ud558\uba74\uc11c \ud568\uc218\ub97c \ud638\ucd9c\ud55c \ucabd\uc73c\ub85c \ubcf5\uadc0\uc2dc\ucf1c\uc900\ub2e4.\n", "- \ubc1c\uc0dd\uc790\ub294 \uace7 \ubc18\ubcf5\uc790\uc774\ub2e4.\n", " - \uc989, \ubc1c\uc0dd\uc790\uc5d0\uac8c next() \ud638\ucd9c\uc774 \uac00\ub2a5\ud558\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def generate_ints(N):\n", " for i in range(N):\n", " yield i" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "gen = generate_ints(3) # \ubc1c\uc0dd\uc790 \uac1d\uccb4\ub97c \uc5bb\ub294\ub2e4. generate_ints() \ud568\uc218\uc5d0 \ub300\ud55c \ucd08\uae30 \uc2a4\ud0dd \ud504\ub808\uc784\uc774 \ub9cc\ub4e4\uc5b4\uc9c0\ub098 \uc2e4\ud589\uc740 \uc911\ub2e8\ub418\uc5b4 \uc788\ub294 \uc0c1\ud0dc\uc784\n", "print gen\n", "print gen.next() # \ubc1c\uc0dd\uc790 \uac1d\uccb4\ub294 \ubc18\ubcf5\uc790 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uac00\uc9c4\ub2e4. \ubc1c\uc0dd\uc790\uc758 \uc2e4\ud589\uc774 \uc7ac\uac1c\ub428. yield\uc5d0 \uc758\ud574 \uac12 \ubc18\ud658 \ud6c4 \ub2e4\uc2dc \uc2e4\ud589\uc774 \uc911\ub2e8\ub428\n", "print gen.next() # \ubc1c\uc0dd\uc790 \uc2e4\ud589 \uc7ac\uac1c. yield\uc5d0 \uc758\ud574 \uac12 \ubc18\ud658 \ud6c4 \ub2e4\uc2dc \uc911\ub2e8\n", "print gen.next() # \ubc1c\uc0dd\uc790 \uc2e4\ud589 \uc7ac\uac1c. yield\uc5d0 \uc758\ud574 \uac12 \ubc18\ud658 \ud6c4 \ub2e4\uc2dc \uc911\ub2e8\n", "print gen.next() # \ubc1c\uc0dd\uc790 \uc2e4\ud589 \uc7ac\uac1c. yield\uc5d0 \uc758\ud574 \ub354 \uc774\uc0c1 \ubc18\ud658\ud560 \uac12\uc774 \uc5c6\ub2e4\uba74 StopIteration \uc608\uc678\ub97c \ub358\uc9d0" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "0\n", "1\n", "2\n" ] }, { "ename": "StopIteration", "evalue": "", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mStopIteration\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# \ubc1c\uc0dd\uc790 \uc2e4\ud589 \uc7ac\uac1c. yield\uc5d0 \uc758\ud574 \uac12 \ubc18\ud658 \ud6c4 \ub2e4\uc2dc \uc911\ub2e8\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# \ubc1c\uc0dd\uc790 \uc2e4\ud589 \uc7ac\uac1c. yield\uc5d0 \uc758\ud574 \uac12 \ubc18\ud658 \ud6c4 \ub2e4\uc2dc \uc911\ub2e8\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# \ubc1c\uc0dd\uc790 \uc2e4\ud589 \uc7ac\uac1c. yield\uc5d0 \uc758\ud574 \ub354 \uc774\uc0c1 \ubc18\ud658\ud560 \uac12\uc774 \uc5c6\ub2e4\uba74 StopIteration \uc608\uc678\ub97c \ub358\uc9d0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mStopIteration\u001b[0m: " ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc704\uc640 \uac19\uc740 \uc138\ubd80 \ub3d9\uc791 \ubc29\uc2dd\uc744 \uc774\uc6a9\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc774 for ~ in \uad6c\ubb38\uc5d0 \uc801\uc6a9\ud560 \uc218 \uc788\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "for i in generate_ints(5):\n", " print i," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 1 2 3 4\n" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ubc1c\uc0dd\uc790 \ud568\uc218\uc640 \uc77c\ubc18 \ud568\uc218\uc758 \ucc28\uc774\uc810\n", " - \uc77c\ubc18 \ud568\uc218\ub294 \ud568\uc218\uac00 \ud638\ucd9c\ub418\uba74 \uadf8 \ud568\uc218 \ub0b4\ubd80\uc5d0 \uc815\uc758\ub41c \ubaa8\ub4e0 \uc77c\uc744 \ub9c8\uce58\uace0 \uacb0\uacfc\ub97c \ubc18\ud658\ud568\n", " - \ubc1c\uc0dd\uc790 \ud568\uc218\ub294 \ud568\uc218 \ub0b4\uc5d0\uc11c \uc218\ud589 \uc911\uc5d0 \uc911\uac04 \uacb0\uacfc \uac12\uc744 \ubc18\ud658\ud560 \uc218 \uc788\uc74c\n", "- \ubc1c\uc0dd\uc790\uac00 \uc720\uc6a9\ud558\uac8c \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\n", " - \ud568\uc218 \ucc98\ub9ac\uc758 \uc911\uac04 \uacb0\uacfc\ub97c \ub2e4\ub978 \ucf54\ub4dc\uc5d0\uc11c \ucc38\uc870\ud560 \uacbd\uc6b0\n", " - \ubaa8\ub4e0 \uacb0\uacfc\ub97c \ud55c\uaebc\ubc88\uc5d0 \ucc98\ub9ac\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \ud568\uc218 \ucc98\ub9ac \uc911\uc5d0 \ub098\uc628 \uc911\uac04 \uacb0\uacfc\ub97c \uc0ac\uc6a9\ud574\uc57c \ud560 \uacbd\uc6b0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-2 \ubc1c\uc0dd\uc790 \uad6c\ubb38\n", "- \ub9ac\uc2a4\ud2b8 \ub0b4\ud3ec(List Comprehension)\n", " - \ub9ac\uc2a4\ud2b8 \uac1d\uccb4\uc758 \uc0c8\ub85c\uc6b4 \uc0dd\uc131\n", " - \uba54\ubaa8\ub9ac\ub97c \uc2e4\uc81c\ub85c \uc810\uc720\ud558\uba74\uc11c \uc0dd\uc131\ub428" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print [k for k in range(100) if k % 5 == 0]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]\n" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub9ac\uc2a4\ud2b8 \ub0b4\ud3ec \uad6c\ubb38\uc5d0 []\uac00 \uc544\ub2c8\ub77c () \uc0ac\uc6a9\n", " - \ub9ac\uc2a4\ud2b8 \ub300\uc2e0\uc5d0 \ubc1c\uc0dd\uc790 \uc0dd\uc131\n", " - \ucc98\uc74c\ubd80\ud130 \ubaa8\ub4e0 \uc6d0\uc18c\uac00 \uc0dd\uc131\ub418\uc9c0 \uc54a\uace0 \ud544\uc694\ud55c \uc2dc\uc810\uc5d0 \uac01 \uc6d0\uc18c\uac00 \ub9cc\ub4e4\uc5b4\uc9d0\n", " - \uba54\ubaa8\ub9ac\ub97c \ubcf4\ub2e4 \ud6a8\uc728\uc801\uc73c\ub85c \uc0ac\uc6a9\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = (k for k in range(100) if k % 5 == 0)\n", "print a\n", "print a.next()\n", "print a.next()\n", "print a.next()\n", "for i in a:\n", " print i," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " at 0x10d84df50>\n", "0\n", "5\n", "10\n", "15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc544\ub798 \uc608\ub294 sum \ub0b4\uc7a5 \ud568\uc218\uc5d0 \ubc1c\uc0dd\uc790\ub97c \ub123\uc5b4\uc90c\n", " - sum\uc744 \ud638\ucd9c\ud558\ub294 \uc2dc\uc810\uc5d0\ub294 \ubc1c\uc0dd\uc790\uac00 \uc544\uc9c1 \ud638\ucd9c\ub418\uae30 \uc9c1\uc804\uc774\ubbc0\ub85c \uac01 \uc6d0\uc18c\ub4e4\uc740 \uc544\uc9c1 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294\ub2e4.\n", " - sum \ub0b4\ubd80\uc5d0\uc11c \ubc1c\uc0dd\uc790\uac00 \uc9c0\ub2c8\uace0 \uc788\ub294 next() \ud568\uc218\ub97c \ud638\ucd9c\ud558\uc5ec \uac01 \uc6d0\uc18c\ub4e4\uc744 \uc9c1\uc811 \ub9cc\ub4e4\uc5b4 \ud65c\uc6a9\ud55c\ub2e4.\n", " - \uba54\ubaa8\uc2dc \uc0ac\uc6a9 \ud6a8\uc728\uc774 \ub192\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print sum((k for k in range(100) if k % 5 == 0))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "950\n" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-3 \ubc1c\uc0dd\uc790\uc758 \ud65c\uc6a9 \uc608 1 - \ud53c\ubcf4\ub098\uce58 \uc218\uc5f4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def fibonacci(a = 1, b = 1):\n", " while 1:\n", " yield a \n", " a, b = b, a + b\n", " \n", "for k in fibonacci(): # \ubc1c\uc0dd\uc790\ub97c \uc9c1\uc811 for ~ in \uad6c\ubb38\uc5d0 \ud65c\uc6a9\n", " if k > 100: \n", " break\n", " print k," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 1 2 3 5 8 13 21 34 55 89\n" ] } ], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-4 \ubc1c\uc0dd\uc790\uc758 \ud65c\uc6a9 \uc608 2 - \ud640\uc218 \uc9d1\ud569 \ub9cc\ub4e4\uae30" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ubc18\ubcf5\uc790\ub97c \ud65c\uc6a9\ud55c \uc608" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Odds:\n", " def __init__(self, limit = None): # \uc0dd\uc131\uc790 \uc815\uc758\n", " self.data = -1 # \ucd08\uae30 \uac12\n", " self.limit = limit # \ud55c\uacc4 \uac12\n", " def __iter__(self): # Odds \uac1d\uccb4\uc758 \ubc18\ubcf5\uc790\ub97c \ubc18\ud658\ud558\ub294 \ud2b9\uc218 \ud568\uc218\n", " return self\n", " def next(self): # \ubc18\ubcf5\uc790\uc758 \ud544\uc218 \ud568\uc218\n", " self.data += 2\n", " if self.limit and self.limit <= self.data:\n", " raise StopIteration\n", " return self.data\n", "\n", "for k in Odds(20):\n", " print k,\n", "print\n", "print list(Odds(20)) # list() \ub0b4\uc7a5 \ud568\uc218\uac00 \uac1d\uccb4\ub97c \uc778\uc218\ub85c \ubc1b\uc73c\uba74 \ud574\ub2f9 \uac1d\uccb4\uc758 \ubc18\ubcf5\uc790\ub97c \uc5bb\uc5b4\uc640 next()\ub97c \ub9e4\ubc88 \ud638\ucd9c\ud558\uc5ec \uac01 \uc6d0\uc18c\ub97c \uc5bb\uc5b4\uc628\ub2e4. " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 3 5 7 9 11 13 15 17 19\n", "[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]\n" ] } ], "prompt_number": 43 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ubc1c\uc0dd\uc790\ub97c \ud65c\uc6a9\ud55c \uc608" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def odds(limit=None):\n", " k = 1\n", " while not limit or limit >= k:\n", " yield k\n", " k += 2\n", " \n", "for k in odds(20):\n", " print k,\n", "print\n", "print list(odds(20)) # list() \ub0b4\uc7a5 \ud568\uc218\uac00 \ubc1c\uc0dd\uc790\ub97c \uc778\uc218\ub85c \ubc1b\uc73c\uba74 \ud574\ub2f9 \ubc1c\uc0dd\uc790\uc758 next()\ub97c \ub9e4\ubc88 \ud638\ucd9c\ud558\uc5ec \uac01 \uc6d0\uc18c\ub97c \uc5bb\uc5b4\uc628\ub2e4. " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 3 5 7 9 11 13 15 17 19\n", "[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]\n" ] } ], "prompt_number": 71 }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\ucc38\uace0 \ubb38\ud5cc: \ud30c\uc774\uc36c(\uc5f4\ud608\uac15\uc758)(\uac1c\uc815\ud310 VER.2), \uc774\uac15\uc131, FreeLec, 2005\ub144 8\uc6d4 29\uc77c

" ] } ], "metadata": {} } ] }