{ "metadata": { "name": "", "signature": "sha256:781cac2e4f95cf351551ac52584752a56f5019a40fb327b10238d53df0d53a55" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "***\n", "# 14. \uc57d\ud55c\ucc38\uc870, \ubc18\ubcf5\uc790, \ubc1c\uc0dd\uc790\n", "***\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 01 \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\n", "- \uc77c\ubc18\uc801\uc73c\ub85c \uac1d\uccb4\ub97c \ucc38\uc870\ud558\ub294 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8\uac00 0\uc774\uba74 \ud574\ub2f9 \uac1d\uccb4\ub294 \uc4f0\ub808\uae30 \uc218\uc9d1(\uba54\ubaa8\ub9ac \ud574\uc81c, Release)\ub428 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-2 \uc57d\ud55c \ucc38\uc870\uc758 \ud544\uc694\uc131\n", "- 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 \uc798 \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\ub97c \ucc38\uc870\ud558\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 sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c\n", "r = weakref.ref(c) # \uc57d\ud55c \ucc38\uc870 \uac1d\uccb4 r \uc0dd\uc131\n", "print sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c --> \uce74\uc6b4\ud2b8 \ubd88\ubcc0\n", "d = c # \uc77c\ubc18\uc801\uc778 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc99d\uac00 \ubc29\ubc95\n", "print sys.getrefcount(c) # \uac1d\uccb4 c\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c\n", "print \n", "\n", "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", "print sys.getrefcount(d) # \uac1d\uccb4 d\uc758 \ub808\ud37c\ub7f0\uc2a4 \uce74\uc6b4\ud2b8 \uc870\ud68c\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": [ "2\n", "2\n", "3\n", "\n", "\n", "<__main__.C instance at 0x10de06a28>\n", "<__main__.C instance at 0x10de06a28>\n", "1\n", "\n", "2\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 22\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\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---> 24\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": 23 }, { "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": [ "- \ub0b4\uc7a5 \uc790\ub8cc\ud615 \uac1d\uccb4\uc5d0 \ub300\ud574 \uc57d\ud55c \ucc38\uc870\ub97c \uc0dd\uc131\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub0b4\uc7a5 \uc790\ub8cc\ud615\uc744 \uc774\uc6a9\ud55c \uc11c\ube0c \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e0 \ud6c4 \ud65c\uc6a9" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Dict(dict):\n", " pass\n", "\n", "d = Dict({'one': 1, 'two': 2})\n", "wd = weakref.ref(d)\n", "print wd\n", "print wd().keys()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "['two', 'one']\n" ] } ], "prompt_number": 12 }, { "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 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 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": [ "2\n", "2\n", "\n", "<__main__.C instance at 0x10de023f8>\n", "<__main__.C instance at 0x10de023f8>\n", "2\n" ] } ], "prompt_number": 29 }, { "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": [ "#### 1) 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": [ "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 0x10de06f38>)]\n", "4\n", "[]\n" ] } ], "prompt_number": 34 }, { "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 0x10de023f8>)]\n", "4\n", "[(1, <__main__.C instance at 0x10de023f8>)]\n" ] } ], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc57d\ud55c \uc0ac\uc804\uc758 \ud0a4\uac12\uc5d0 \uc57d\ud55c \ucc38\uc870\ub97c \ud560\ub2f9\ud558\ub294 \uc608\uc81c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "d = weakref.WeakKeyDictionary()\n", "c = C()\n", "c.a = 4\n", "d[c] = 1 # \uc2e4\uc81c \uac1d\uccb4\uc5d0 \ub300\ud55c \uc57d\ud55c \ucc38\uc870\ub97c \ud0a4\ub85c \uc9c0\ub2c8\ub294 \uc544\uc774\ud15c \uc0dd\uc131\n", "\n", "print d.items()\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": [ "[(<__main__.C instance at 0x10de023f8>, 1)]\n", "[]\n" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 02 \ubc18\ubcf5\uc790\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-1 \uae30\uc874 \uc778\ub371\uc2f1\uc758 \ubb38\uc81c\uc810\n", "- \\_\\_getitem\\_\\_ \uba54\uc18c\ub4dc\n", " - \uc778\ub371\uc2f1 \uc815\uc758 \uba54\uc18c\ub4dc\n", " - \uc778\uc790\ub85c self\uc640 k\ub97c \ubc1b\uc544\uc57c \ud55c\ub2e4.\n", " - \uc774 \uba54\uc18c\ub4dc\ub294 for ~ in \uacfc \uac19\uc740 \ubc18\ubcf5\ubb38\uc5d0\uc11c\ub3c4 \ud638\ucd9c\ub41c\ub2e4.\n", " - \uc774 \ub54c k \uc778\ub371\uc2a4\uc758 \ud6a8\uc728\uc801\uc778 \ud65c\uc6a9\uc774 \uc5b4\ub824\uc6b4 \uacbd\uc6b0\uac00 \uc788\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Even:\n", " def __getitem__(self, k):\n", " return k * 2\n", " \n", "e = Even()\n", "\n", "for x in e: # for ~ in \ubc18\ubcf5\ubb38\uc73c\ub85c \ucc38\uc870\ud558\ub294 \uacbd\uc6b0, \uc790\ub3d9\uc73c\ub85c __getitem__(e, 0), __getitem__(e, 1), __getitem__(e, 2)... \ub4f1\uc774 \ud638\ucd9c\ub41c\ub2e4.\n", " print x,\n", " if x > 20:\n", " break\n", "\n", "print \n", "print e[2] # \ub2e8\uc21c \uc778\ub371\uc2f1\uc73c\ub85c \ucc38\uc870\ud558\ub294 \uacbd\uc6b0 --> \uc774 \uacbd\uc6b0 __getitem__(e, 2)\uac00 \ud638\ucd9c\ub41c\ub2e4." ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 2 4 6 8 10 12 14 16 18 20 22\n", "4\n" ] } ], "prompt_number": 51 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud30c\uc77c\uc758 \ub77c\uc778\uc744 \uc21c\ucc28\uc801\uc73c\ub85c \uc77d\ub294 \uc608\uc81c\n", " - \uc544\ub798 \uc608\uc81c\uc5d0\uc11c \\_\\_getitem\\_\\_ \uba54\uc18c\ub4dc\uc758 k \uc778\uc790\ub294 \uc544\ubb34 \uc5ed\ud560\ub3c4 \ud558\uc9c0 \uc54a\ub294\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Seq:\n", " def __init__(self, fname): # \uc77d\uc744 \ud30c\uc77c \uc774\ub984 \uc124\uc815\n", " self.file = open(fname)\n", " def __getitem__(self, k):\n", " line = self.file.readline() # \ud55c \ub77c\uc778\uc744 \uc77d\ub294\ub2e4.\n", " if not line: \n", " raise IndexError # \uc77d\uc744 \uc218 \uc5c6\uc73c\uba74 \uc608\uc678 \ubc1c\uc0dd\n", " return line # \uc77d\uc740 \ub77c\uc778\uc744 \ub9ac\ud134\ud55c\ub2e4.\n", "\n", " \n", "s = Seq('readme.txt')\n", "for line in s: # for ~ in \ub8e8\ud504, \uc790\ub3d9\uc73c\ub85c __getitem__(s, 0), __getitem__(s, 1), __getitem__(s, 2)... \ub4f1\uc774 \ud638\ucd9c\ub41c\ub2e4.\n", " print line," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1: Hello World\n", "2: Hello World\n", "3: Hello World\n", "4: Hello World\n", "5: Hello World\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc778\ub371\uc2a4\ub85c \uc801\uc808\ud55c \uac12\uc744 \uc8fc\uc5b4\ub3c4 \\_\\_getitem\\_\\_ \uba54\uc18c\ub4dc\uc758 k \uc778\uc790\uc758 \uc5ed\ud560\uc774 \uc5c6\uc73c\ubbc0\ub85c \ub2e8\uc21c\ud788 \uac01 \ub77c\uc778\uc744 \uc21c\ucc28\uc801\uc73c\ub85c \uc77d\uc5b4 \ubc18\ud658\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "S = Seq('readme.txt')\n", "print S[2]\n", "print S[4]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1: Hello World\n", "\n", "2: Hello World\n", "\n" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-2 \ubc18\ubcf5\uc790 \uac1d\uccb4\n", "- \ubc18\ubcf5\uc790 \uac1d\uccb4\uc758 \ud2b9\uc131\n", " - iter(o) \ub0b4\uc7a5 \ud568\uc218\ub85c \uac1d\uccb4 o\uc758 \ubc18\ubcf5\uc790 \uac1d\uccb4\ub97c \ub9cc\ub4e0\ub2e4.\n", " - \ubc18\ubcf5\uc790 \uac1d\uccb4\ub294 \ubc18\ub4dc\uc2dc next() \uba54\uc18c\ub97c \uc9c0\ub2cc\ub2e4 (\uc989, next() \uba54\uc18c\ub4dc\ub97c \uc9c0\ub2c8\uace0 \uc788\ub294 \uac1d\uccb4\uac00 \ubc18\ubcf5\uc790\uc774\ub2e4.)\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\uc758 \ud544\uc694\uc131\n", " - \uc21c\ucc28\uc801\uc73c\ub85c \ucc38\uc870\ud558\uc9c0\ub9cc \uc778\ub371\uc2f1\uc5d0 \uc758\ud55c \uc21c\ucc28\uc801\uc778 \ucc38\uc870(\\_\\_getitem\\_\\_ \uba54\uc18c\ub4dc\uc758 k \uc778\uc790)\uac00 \uc758\ubbf8 \uc5c6\ub294 \uacbd\uc6b0\ub97c \ubcf4\uc644\ud558\uae30 \uc704\ud568" ] }, { "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": 54 }, { "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": "markdown", "metadata": {}, "source": [ "- \ub9ac\uc2a4\ud2b8, \ud29c\ud50c, \uc0ac\uc804 \ub4f1\uc740 \ub0b4\ubd80\uc801\uc73c\ub85c \\_\\__iter_\\_\\_() \ud568\uc218\ub97c \uc9c0\ub2c8\uace0 \uc788\uc73c\uba70, \uc774\ub294 iter() \ub0b4\uc7a5 \ud568\uc218\uc5d0 \uc758\ud558\uc5ec \ud638\ucd9c\ub41c\ub2e4. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " print x + 1\n", "\n", "for x in [1,2,3].__iter__():\n", " f(x)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "4\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " print x + 1\n", "\n", "for x in (1,2,3).__iter__():\n", " f(x)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "4\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-3 \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 __iter__(self): # iter(..)\uc5d0 \uc758\ud574\uc11c \ud638\ucd9c\ub418\ub294 \uba54\uc18c\ub4dc\n", " return self # next \uba54\uc18c\ub4dc\ub97c \uad6c\ud604\ud558\uace0 \uc788\uc73c\ubbc0\ub85c self \uc790\uccb4\uac00 \ubc18\ubcf5\uc790\uac00 \ub420 \uc218 \uc788\ub2e4.\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: # \ubc18\ubcf5\uc790 \uc778\uc2a4\ud134\uc2a4\uc5d0 \ub300\ud574\uc11c\ub294 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": [ "1: Hello World\n", "2: Hello World\n", "3: Hello World\n", "4: Hello World\n", "5: Hello World\n", "<__main__.Seq instance at 0x10de0c6c8>\n", "['1: Hello World\\n', '2: Hello World\\n', '3: Hello World\\n', '4: Hello World\\n', '5: Hello World']\n", "('1: Hello World\\n', '2: Hello World\\n', '3: Hello World\\n', '4: Hello World\\n', '5: Hello World')\n" ] } ], "prompt_number": 52 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-4 \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 d.__iter__():\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": 11 }, { "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-5 \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": [ "### 2-6 \ud638\ucd9c \uac00\ub2a5\ud55c \uac1d\uccb4\uc5d0 \ubc18\ubcf5\uc790 \uc801\uc6a9\ud558\uae30\n", "- \uad6c\ubb38\n", "> far val in iter(callable, endval):
\n", "     statements\n", "\n", " - callable\uc774 endval\uc744 \ubc18\ud658\ud560 \ub54c \uae4c\uc9c0 statements\ub97c \ubc18\ubcf5\ud55c\ub2e4. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "for line in iter(raw_input, ''):\n", " print line" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "aaa\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "aaa\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "bbb\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "bbb\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "ccc\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "ccc\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "def accum(s, a):\n", " return s + a\n", "\n", "sum = 0\n", "for sum in iter(lambda:accum(sum, 2), 40):\n", " print sum" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "4\n", "6\n", "8\n", "10\n", "12\n", "14\n", "16\n", "18\n", "20\n", "22\n", "24\n", "26\n", "28\n", "30\n", "32\n", "34\n", "36\n", "38\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub9cc\uc57d endval\uc744 \uc815\ud655\ud558\uac8c \uc608\uce21\ud558\uae30 \ud798\ub4e4\uba74 iter()\uc758 \ub450 \ubc88\uc9f8 \uc778\uc218\uc5d0 None \uac12\uc744 \ud560\ub2f9\ud558\uace0, for ~ in \ubb38\uc758 body\uc5d0\uc11c \ud574\ub2f9 \uc870\uac74\uc744 \uac80\uc0ac\ud55c\ub2e4. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "import math\n", "def accum(sum, a):\n", " return sum + a\n", "\n", "sum = 0\n", "for sum in iter(lambda:accum(sum, math.pi), None):\n", " if sum >= 20:\n", " break\n", " print sum,\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3.14159265359 6.28318530718 9.42477796077 12.5663706144 15.7079632679 18.8495559215\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-7 itertools \ubaa8\ub4c8\n", "- \uac01\uc790 \uacf5\ubd80" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from itertools import *\n", "L1 = [1,2,3]\n", "L2 = [4,5,6]\n", "for k in chain(L1, L2):\n", " print k, # L1, L2\uc5d0 \ub300\ud574 \uc5f0\uc18d\ub41c \ub370\uc774\ud130\ub97c \ub118\uaca8\uc900\ub2e4.\n", "print\n", "for k in (L1+L2):\n", " print k, #\uc774 \ubc29\ubc95\uc740 \uc0c8\ub85c\uc6b4 \ub9ac\uc2a4\ud2b8\ub97c \uc0dd\uc131\ud558\ubbc0\ub85c \uba54\ubaa8\ub9ac\ub97c \ub0ad\ube44\ud55c\ub2e4." ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 2 3 4 5 6\n", "1 2 3 4 5 6\n" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "for k in count(10):\n", " if k == 100:\n", " break\n", " print k, " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99\n" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "i = 0\n", "for k in cycle([1, 2, 3]):\n", " if i == 18:\n", " break\n", " print k,\n", " i += 1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3\n" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "names = ['gslee', 'kim', 'park']\n", "for regNo, name in izip(count(140), names): #\ud544\uc694\ud55c \ub9cc\ud07c \uac00\uc838\ub2e4\uc4f4\ub2e4.\n", " print regNo, name" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "140 gslee\n", "141 kim\n", "142 park\n" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "#for k in cycle([1,2,3])\n", " #print k," ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "for k in dropwhile(lambda x:x<3, [1,2,3,4,5,1,2]):\n", " print k," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 4 5 1 2\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "for k in takewhile(lambda x:x<3, [1,2,3,4,5,1,2]):\n", " print k," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 2\n" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "L = [(1,2), (2,3), (1,2), (4,2)]\n", "for key, group in groupby(sorted(L)):\n", " print key, list(group)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(1, 2) [(1, 2), (1, 2)]\n", "(2, 3) [(2, 3)]\n", "(4, 2) [(4, 2)]\n" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "from operator import itemgetter\n", "for key, group in groupby(sorted(L, key=itemgetter(1)), key=itemgetter(1)):\n", " print key, list(group)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2 [(1, 2), (1, 2), (4, 2)]\n", "3 [(2, 3)]\n" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "s = 'I like python I like programming'\n", "for key, group in groupby(sorted(s.split())):\n", " print key, len(list(group))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "I 2\n", "like 2\n", "programming 1\n", "python 1\n" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "a = [1,2,3,4]\n", "b = [10, 20, 30, 40]\n", "dict(izip(a,b))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "{1: 10, 2: 20, 3: 30, 4: 40}" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "L = [(1,2), (2,3), (1,2), (4,2)]\n", "starmap(lambda x,y:x+y, L) #(1,2)\uac00 x,y\uc778\uc218\ub85c \uac01\uac01 \uc804\ub2ec\ub41c\ub2e4. imap\uc5d0\uc11c\ub294 (1,2)\uac00 \ud55c \uac1c\uc758 \uc778\uc218\uc774\ub2e4." ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "list(ifilterfalse(lambda x:x%2, range(10)))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "[0, 2, 4, 6, 8]" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "L = [1,2,6,4,3,8,7,6]\n", "for ele in islice(L, 0, len(L), 2):\n", " print ele," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 6 3 7\n" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "L = [1,2,6,4,3,8,7,6]\n", "for k in repeat(L, 2):\n", " print k" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 6, 4, 3, 8, 7, 6]\n", "[1, 2, 6, 4, 3, 8, 7, 6]\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "L = [(1,2), (2,3), (1,2), (4,2)]\n", "i1, i2 = tee(L)\n", "for k in i1:\n", " print k,\n", "print\n", "for k in i2:\n", " print k," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(1, 2) (2, 3) (1, 2) (4, 2)\n", "(1, 2) (2, 3) (1, 2) (4, 2)\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 03 \ubc1c\uc0dd\uc790\n", "***\n", "- \ubc1c\uc0dd\uc790(Generator)\n", " - (\uc911\ub2e8\ub428 \uc2dc\uc810\ubd80\ud130) \uc7ac\uc2e4\ud589 \uac00\ub2a5\ud55c \ud568\uc218" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-1 \ubc1c\uc0dd\uc790\ub780?\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", " - yield \ud0a4\uc6cc\ub4dc\ub97c \uc9c0\ub2c8\uace0 \uc788\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 \ub0b4\ubd80\uc801\uc73c\ub85c \ubc18\ubcf5\uc790 \uae30\ub2a5\uc744 \uc9c0\ub2cc\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": [ "print (k for k in range(100) if k % 5 == 0)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " at 0x10ddd64b0>\n" ] } ], "prompt_number": 21 }, { "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": [ "- \ub8e8\ud504\uc5d0\uc11c \uc0ac\uc6a9\ud55c \ubcc0\uc218 \uc811\uadfc \ucc28\uc774\n", " - \ub9ac\uc2a4\ud2b8 \ub0b4\ud3ec\ub294 \ub9ac\uc2a4\ud2b8 \uad6c\ubb38 \ubc16\uc5d0\uc11c \ub8e8\ud504 \ubcc0\uc218 \uc811\uadfc \uac00\ub2a5\n", " - \ubc1c\uc0dd\uc790\ub294 \uc77c\uc885\uc758 \ud568\uc218\uc774\ubbc0\ub85c \ud568\uc218 \ub0b4\uc5d0\uc11c \uc120\uc5b8\ub41c \ub8e8\ud504 \ubcc0\uc218\ub294 \ubc1c\uc0dd\uc790 \uc678\ubd80\uc5d0\uc11c \uc811\uadfc \ubd88\uac00" ] }, { "cell_type": "code", "collapsed": false, "input": [ "del k\n", "print [k for k in range(100) if k % 5 == 0]\n", "print k # \uc678\ubd80\uc5d0\uc11c \ubcc0\uc218 \ucc38\uc870\uac00 \uac00\ub2a5\ud558\ub2e4\n", "print\n", "\n", "del k\n", "print (k for k in range(100) if k % 5 == 0)\n", "print k # \ubc1c\uc0dd\uc790\uc758 \ub0b4\ubd80 \ubcc0\uc218\ub294 \ucc38\uc870\ud560 \uc218 \uc5c6\ub2e4\n" ], "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", "99\n", "\n", " at 0x10ddd6780>\n" ] }, { "ename": "NameError", "evalue": "name 'k' is not defined", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\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 6\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mk\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;36m5\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mk\u001b[0m \u001b[0;31m# \ubc1c\uc0dd\uc790\uc758 \ub0b4\ubd80 \ubcc0\uc218\ub294 \ucc38\uc870\ud560 \uc218 \uc5c6\ub2e4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'k' is not defined" ] } ], "prompt_number": 36 }, { "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", "t = fibonacci() # t\ub294 \ubc1c\uc0dd\uc790\n", "for i in range(11):\n", " print t.next()," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 1 2 3 5 8 13 21 34 55 89\n" ] } ], "prompt_number": 41 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc704 \uc608\ubcf4\ub2e4\ub294 \uc544\ub798 \ubc29\ubc95\uc774 \ub354 \uc120\ud638\ub428" ] }, { "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": [ "### 3-5 \ubc1c\uc0dd\uc790\uc758 \ud65c\uc6a9 \uc608 3 - \uc8fc\uc5b4\uc9c4 \ub9ac\uc2a4\ud2b8 \ub0b4\uc758 \uac01 \uc6d0\uc18c\ub97c \ud558\ub098\uc529 \uac74\ub108 \ub6f0\uc5b4\uc11c \ucde8\ud558\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def alternating(a):\n", " ta = iter(a) # \uc6b0\uc120 a\ub97c \ubc18\ubcf5\uc790 \uac1d\uccb4\ub85c \ubcc0\ud658\ud55c \ud6c4\n", " while 1: \n", " ta.next() # \ud558\ub098\ub294 \ubc84\ub9ac\uace0\n", " yield ta.next() #\uadf8 \ub2e4\uc74c \uac83\uc740 \ucde8\ud558\uace0\n", " \n", "for x in alternating([1,2,3,4,5,6,7]):\n", " print x," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2 4 6\n" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-6 \ubc1c\uc0dd\uc790\uc758 \ud65c\uc6a9 \uc608 4 - \uc774\uc9c4 \ud2b8\ub9ac \ud0d0\uc0c9 (Binary Tree Traversal)\n", "- \uc911\uc704 (inorder) \ud0d0\uc0c9\n", "- \uac01\uc790 \uacf5\ubd80" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-7 \ubc1c\uc0dd\uc790\uc758 \ud65c\uc6a9 \uc608 5 - \uc911\ucca9 \ub9ac\uc2a4\ud2b8\ub97c \ub2e8\uc77c \ub9ac\uc2a4\ud2b8\ub85c \ub9cc\ub4e4\uae30\n", "- \ubc1c\uc0dd\uc790\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc7ac\uadc0\uc801 \ubc29\ubc95" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def traverse(t):\n", " if not isinstance(t, list):\n", " return [t]\n", " res = []\n", " for el in t:\n", " res.extend(traverse(el))\n", " return res\n", "\n", "print traverse([1,2])\n", "print\n", "\n", "print traverse([[1,2],3])\n", "print\n", "\n", "a = [[1,2,3],4,5,[6,7],[8,9,10]]\n", "b = traverse(a)\n", "print b" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2]\n", "\n", "[1, 2, 3]\n", "\n", "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n" ] } ], "prompt_number": 70 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ubc1c\uc0dd\uc790\ub97c \ud65c\uc6a9\ud55c \ubc29\ubc95" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def traverse(t):\n", " for el in t:\n", " if isinstance(el, list):\n", " for k in traverse(el):\n", " yield k\n", " else:\n", " yield el\n", "\n", "print list(traverse([1,2]))\n", "print\n", "\n", "print list(traverse([[1,2],3]))\n", "print \n", " \n", "a = [1,2,3,[4,5],6,[7,[8,[9]],10]]\n", "b = list(traverse(a))\n", "print b" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2]\n", "\n", "[1, 2, 3]\n", "\n", "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n" ] } ], "prompt_number": 69 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ubc1c\uc0dd\uc790\ub294 \uc2dc\ud000\uc2a4 \uac1d\uccb4\uac00 \ud560\ub2f9\ub420 \uc218 \uc788\ub294 \uacf3\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = [1,2,3,[4,5],6,[7,[8,[9]],10]]\n", "print max(traverse(a))\n", "print min(traverse(a))\n", "\n", "print reduce(lambda x, y: x + y, traverse(a))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10\n", "1\n", "55\n" ] } ], "prompt_number": 74 } ], "metadata": {} } ] }