diff --git a/L1.ipynb b/L1.ipynb index 8d9a806..9e85a97 100644 --- a/L1.ipynb +++ b/L1.ipynb @@ -26,18 +26,35 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "subslide" + "slide_type": "fragment" } }, "source": [ "* Prowadzący:\n", - " * dr Leszek Grzanka, [@leszekgrzanka](https://twitter.com/leszekgrzanka), grzanka@agh.edu.pl\n", + " * dr Leszek Grzanka, [@leszekgrzanka]\n", + " (https://twitter.com/leszekgrzanka), \n", + " grzanka@agh.edu.pl\n", + " \n", "* Współautorzy materiałów: \n", - " * dr inż. Krzysztof Dorosz, [@krzysztofdorosz](https://twitter.com/krzysztofdorosz), dorosz@agh.edu.pl\n", - " * dr inż. Michał Korzycki, [@michalkorzycki](https://twitter.com/michalkorzycki), korzycki@agh.edu.pl\n", - "* Oficjalne ogłoszenia poprzez twitter: [@PythonAGH](https://twitter.com/PythonAGH)\n", - "* Slajdy udostępnione w formacie IPython Notebook na [naszym koncie github agh-glk](https://github.com/agh-glk/python-lecture)\n", - "* Na pewno nie unikniemy gdzieś błędu w materiałach wykładu, dlatego gorąco zachęcamy do zgłaszania poprawek na githubie (fork + pull request)" + " * dr inż. Krzysztof Dorosz, [@krzysztofdorosz]\n", + " (https://twitter.com/krzysztofdorosz), \n", + " dorosz@agh.edu.pl\n", + " \n", + " * dr inż. Michał Korzycki, [@michalkorzycki]\n", + " (https://twitter.com/michalkorzycki), \n", + " korzycki@agh.edu.pl\n", + " \n", + "* Oficjalne ogłoszenia poprzez twitter: \n", + " [@PythonAGH]\n", + " (https://twitter.com/PythonAGH)\n", + " \n", + "* Slajdy udostępnione w formacie IPython Notebook \n", + " na [naszym koncie github agh-glk]\n", + " (https://github.com/agh-glk/python-lecture)\n", + " \n", + "* Na pewno nie unikniemy gdzieś błędu w materiałach \n", + " wykładu, dlatego gorąco zachęcamy do zgłaszania \n", + " poprawek na githubie (fork + pull request)" ] }, { @@ -55,7 +72,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -64,16 +85,20 @@ " return []\n", " else:\n", " tmp = list[0]\n", - " less = [x for x in list if x < tmp]\n", + " less = [x for x in list[1:] if x < tmp]\n", " more = [x for x in list[1:] if x >= tmp]\n", " return fun(less) + [tmp] + fun(more)\n", " \n", - "fun([3,2,1,4])" + "fun([3, 2, 1, 4])" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Co takiego robi powyższy kod?" ] @@ -91,7 +116,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* Wysokopoziomowym (programowanie funkcjonalne!)\n", "* Skryptowym (ale ma bytecode jak Java)\n", @@ -115,7 +144,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " * Szybsze pisanie kodu - zwykle około 2-10 razy krótszy kod (w porównaniu do C, C++, Java wg Guido) \n", " * Łatwiejsze utrzymanie kodu - nacisk na czytelność\n", @@ -139,7 +172,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* Nie jest tak szybki jak C/C++\n", "\n", @@ -153,6 +190,7 @@ "execution_count": null, "metadata": { "collapsed": false, + "scrolled": true, "slideshow": { "slide_type": "subslide" } @@ -175,12 +213,25 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* BDFL - **Guido van Rossum**\n", " * Benevolent Dictator For Life\n", - "* Centrum Wiskunde & Informatica – Amsterdam Hollandia\n", - "\n", + "* Centrum Wiskunde & Informatica – Amsterdam Hollandia" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ "![caption](files/L1_img/guido1.jpg)" ] }, @@ -262,7 +313,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "PEP - Python Enhancement Proposal - system dokumentów (podobna idea jak w RFC), zawierający pomysły na rozwój środowiska Python\n", "\n", @@ -276,7 +331,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -296,7 +355,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* podręczny kalkulator\n", "* piaskownica do testowania fragmentów kodu\n", @@ -318,7 +381,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -331,7 +398,7 @@ " if guess == number:\n", " print('Congratulations, you guessed it.')\n", " running = False # this causes the while loop to stop\n", - " #break # - but we can't use break here -> no else then \n", + " break # - but we can't use break here -> no else then \n", " elif guess < number:\n", " print('No, it is a little higher than that.')\n", " else:\n", @@ -356,7 +423,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Typowa pętla po liczbach:" ] @@ -365,7 +436,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -377,7 +452,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "W praktyce najczęściej iterujemy po elementach:" ] @@ -386,7 +465,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -396,7 +479,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "W takiej pętli nie mamy dostępu do indeksu elementu w liście, ale możemy taki uzyskać, odpowiednio mapując kolekcję za pomocą enumerate (generator):" ] @@ -405,7 +492,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -416,7 +507,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -477,7 +572,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -489,7 +588,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -502,7 +605,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -516,7 +623,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -528,7 +639,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -540,7 +655,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -551,15 +670,6 @@ "print(ll)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": { @@ -575,7 +685,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -583,31 +697,40 @@ "print(t)" ] }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "`(137)` nie jest jednoelementową krotką. Jak ją stworzyć?" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ - "t = (137)\n", + "t = (137,)\n", "print(t)\n", "print(t[0])" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`(137)` nie jest jednoelementową krotką. Jak ją stworzyć?" - ] - }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, + "collapsed": true, + "scrolled": true, "slideshow": { "slide_type": "subslide" } @@ -622,7 +745,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -634,7 +761,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -646,7 +777,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -658,7 +793,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -680,16 +819,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -700,7 +834,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Ponieważ mamy krotki, w języku Python zamianę zmiennych wykonujemy z użyciem idiomu:" ] @@ -709,7 +847,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -720,7 +862,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "W innych językach musielibyśmy napisać:\n", " \n", @@ -742,7 +888,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " +---+---+---+---+---+\n", " | H | e | l | l | o |\n", @@ -755,7 +905,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -767,7 +921,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -778,7 +936,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -789,7 +951,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -800,7 +966,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -811,7 +981,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -822,7 +996,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -844,7 +1022,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -860,7 +1042,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -872,7 +1058,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -884,7 +1074,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -895,7 +1089,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -907,7 +1105,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -918,7 +1120,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -929,7 +1135,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -940,7 +1150,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -951,7 +1165,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -972,7 +1190,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Kluczem (w skrócie) może być wszystko, co ma swoją reprezentację jako hash, a dokładniej:\n", "\n", @@ -983,7 +1205,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -997,7 +1223,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1011,7 +1241,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1035,7 +1269,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1047,7 +1285,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1059,7 +1301,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1081,7 +1327,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1095,7 +1345,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1106,7 +1360,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1117,7 +1375,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1128,7 +1390,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1150,7 +1416,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1163,14 +1433,18 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ "def say_even_more(*args, **kwargs):\n", - " print(args) #lista\n", + " print(args) #krotka\n", " print(kwargs) #mapa\n", - " \n", + "\n", "say_even_more(1, 2, 3, foo=4, bar=5)" ] }, @@ -1189,7 +1463,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1218,7 +1496,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1237,8 +1519,9 @@ "execution_count": null, "metadata": { "collapsed": false, + "scrolled": true, "slideshow": { - "slide_type": "subslide" + "slide_type": "fragment" } }, "outputs": [], @@ -1253,7 +1536,7 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "subslide" + "slide_type": "slide" } }, "source": [ @@ -1264,7 +1547,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1279,7 +1566,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1294,7 +1585,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1310,7 +1605,7 @@ "cell_type": "markdown", "metadata": { "slideshow": { - "slide_type": "subslide" + "slide_type": "slide" } }, "source": [ @@ -1330,7 +1625,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* Python, Groovy, JavaScript, Ruby są **dynamicznie typowalne (dynamic typing)**\n", " * Typ związany z wartością – nie zmienną\n" @@ -1340,7 +1639,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1387,7 +1690,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1428,7 +1735,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1449,7 +1760,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1462,7 +1777,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1488,21 +1807,33 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "### Wyrażenie import" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* Zmienna __name__ zawiera nazwę bieżącego pakietu" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " #!/usr/bin/python\n", " # Filename: using_name.py\n", @@ -1515,7 +1846,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Przykładowe uruchomienia:\n", " \n", @@ -1530,7 +1865,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " sound/ Top-level package\n", " __init__.py Initialize the sound package\n", @@ -1548,7 +1887,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "* **import**\n", " * dołącza plik z $PYTHONPATH: .:/usr/local/lib/python\n", @@ -1574,7 +1917,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* Kolekcja modułów (pakiet) znajduje się w katalogu\n", "* Katalog z modułem musi zawierać plik \\__init\\__.py\n", @@ -1583,7 +1930,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### dir()" ] @@ -1592,7 +1943,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1604,7 +1959,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1615,7 +1974,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1626,7 +1989,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1637,7 +2004,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1648,7 +2019,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1659,7 +2034,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1671,7 +2050,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1690,7 +2073,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1701,7 +2088,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1713,7 +2104,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1725,7 +2120,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1736,7 +2135,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1748,7 +2151,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1759,7 +2166,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1770,7 +2181,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1781,7 +2196,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1792,18 +2211,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "dir()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1823,7 +2235,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* CPython - standardowa implementacja jest często w kontekście innych alternatywnych nazywana CPython\n", "\n", @@ -1840,6 +2256,7 @@ } ], "metadata": { + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1855,7 +2272,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.3" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/L2.ipynb b/L2.ipynb index eb677c2..2ce1795 100644 --- a/L2.ipynb +++ b/L2.ipynb @@ -2,21 +2,33 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Język Python - Wykład 2." ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## PEP 8 - Zasady formatowania kodu" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " **,,code is read much more often than it is written''** (BDFL)\n", " \n", @@ -30,7 +42,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "* http://www.python.org/dev/peps/pep-0008/\n", "* 4 spacje na jedno wcięcie kodu \n", @@ -40,7 +56,17 @@ "* Dwie puste linie pomiędzy kodem klas\n", "* Maksymalna długość linii kodu to 79 znaków\n", "* Nie używać ``from import *`` - zatrucie przestrzeni nazw\n", - "* starać się nie używać zmiennych ``l`` (małe L, podobne do 1), ``O`` (duże o, podobne do zero), ``I`` (duże i, podobne do 1)\n", + "* starać się nie używać zmiennych ``l`` (małe L, podobne do 1), ``O`` (duże o, podobne do zero), ``I`` (duże i, podobne do 1)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ "* Znak spacji po znaku ``,`` w słownikach, zbiorach, listach, krotkach, argumentach oraz po znaku ``:`` w słownikach (nie przed!)\n", "\n", " Dobrze:\n", @@ -67,7 +93,17 @@ " a= 5\n", " a =5\n", " f(a = 5, b = 10)\n", - " f(a= 5, b= 10)\n", + " f(a= 5, b= 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ "\n", "* Bez spacji na brzegach nawiasowania i listy argumentów\n", "\n", @@ -100,14 +136,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Kilka słów o logicznych typach danych" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Do umieszczenia w repozytorium przed zwolnieniem się z firmy (za https://gist.github.com/aras-p/6224951)\n", " #define true ((rand()&15)!=15)\n", @@ -116,7 +160,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Słowa kluczowe - traktowane specjalnie przez parser" ] @@ -125,7 +173,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -135,7 +186,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Nie można użyć słów kluczowych do nazywania zmiennych i funkcji" ] @@ -144,7 +199,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -154,7 +212,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Wbudowane - typy, funkcje, wyjątki. Traktowane przez parser jak identyfikatory tworzone przez programistę. Można (o zgrozo) używać ich w przypisaniach." ] @@ -163,7 +225,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -174,19 +239,26 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ "int = \"ojej\"\n", - "len = lambda x : 137" + "len = lambda x : 137\n", + "len([1, 3])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -196,7 +268,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "* Porównania\n", "\n", @@ -210,7 +286,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -222,7 +301,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -234,7 +316,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -246,7 +331,7 @@ " guess = int(raw_input('Enter an integer : '))\n", "\n", " if guess == number:\n", - " print 'Congratulations, you guessed it.'\n", + " print ('Congratulations, you guessed it.')\n", " running = False # this causes the while loop to stop\n", " elif guess < number:\n", " print('No, it is a little higher than that.')\n", @@ -257,7 +342,7 @@ " # Do anything else you want to do here\n", " print('Done')\n", "\n", - "#True = 0\n", + "True = 0\n", "guess()" ] }, @@ -265,7 +350,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -274,7 +362,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Porównania:\n", "\n", @@ -287,7 +379,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Listy - zaawansowane użycie" ] @@ -296,7 +392,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -305,7 +404,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Przedłużanie listy" ] @@ -314,7 +417,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -325,7 +431,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Usuwanie z listy" ] @@ -334,7 +444,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -346,7 +459,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -358,7 +474,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -368,7 +487,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Lista jako stos" ] @@ -377,7 +500,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -389,7 +515,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -400,7 +529,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -411,7 +543,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -422,7 +557,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -431,14 +569,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Lista jako kolejka" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Listy można używać jak kolejki, ale operacje na początku listy są nieefektywne:" ] @@ -447,7 +593,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -459,7 +608,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -469,7 +621,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Zamiast tego lepiej użyć specjalnie do tego przeznaczonej struktury deque z modułu standardowego collections:" ] @@ -478,7 +634,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -493,7 +652,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -504,7 +666,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -513,14 +678,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### List comprehension" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Rozwijanie listy jest idiomem zastępujacym wyrażenia pętli for budującej listę:" ] @@ -529,7 +702,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -542,7 +718,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "To samo można zapisać prościej:" ] @@ -551,7 +731,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -560,7 +743,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Można też tworzyć pętle zagnieżdzone i używać konstrukcji warunkowych:" ] @@ -569,7 +756,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -578,7 +768,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Trójki pitagorejskie" ] @@ -587,7 +781,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -599,7 +796,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -609,16 +809,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "Set comprehension" + "### Set comprehension" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -627,55 +834,66 @@ "a,b,a&b" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Dictionary comprehension" - ] - }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ - "mcase = {'a':10, 'b': 34, 'A': 7, 'Z':3}\n", - "mcase_frequency = { k.lower() : mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys() }\n", - "mcase_frequency" + "new_set = {i for i in ['ala', 'ma', 'kota', 'kota']}\n", + "new_set" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "## Set comprehension" + "### Dictionary comprehension" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ - "new_set = {i for i in ['ala', 'ma', 'kota', 'kota']}\n", - "new_set" + "mcase = {'a':10, 'b': 34, 'A': 7, 'Z':3}\n", + "mcase_frequency = { k.lower() : mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys() }\n", + "mcase_frequency" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Lambda wyrażenia" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* Funkcja nienazwana utworzona w miejscu (anonimowa)\n", "* Można ją przypisać do zmiennej \n", @@ -688,7 +906,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -699,7 +920,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -711,18 +935,25 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ - "lambda x: \"big\" if x > 100 else \"small\"" + "tell = lambda x: \"big\" if x > 100 else \"small\"\n", + "tell(1332)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -736,14 +967,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Sortowanie" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Sortowanie przez tworzenie nowej listy:" ] @@ -752,17 +991,26 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ - "(5, 2, 3, 1, 4)\n", - "sorted(sta)" + "sta = (5, 2, 3, 1, 4)\n", + "nowa = sorted(sta)\n", + "print('sta ', sta, type(sta) )\n", + "print ('nowa ', nowa, type(nowa))\n" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Sortowanie w miejscu:" ] @@ -771,7 +1019,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -782,7 +1033,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Sortowaniem z użyciem klucza:" ] @@ -791,7 +1046,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -803,7 +1061,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -812,7 +1073,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Kluczem może być nawet callable, który go wygeneruje:" ] @@ -821,7 +1086,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -833,7 +1101,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -842,7 +1113,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Python implementuje stabilne sortowanie:" ] @@ -851,7 +1126,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -861,14 +1139,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Programowanie funkcyjne" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* filter - filtrowanie kolekcji\n", "* map - zmiana formatu kolekcji\n", @@ -877,7 +1163,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Policzyć, ile owoców wspólnie mają Merry i Tom:" ] @@ -886,7 +1176,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -908,7 +1201,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Filtrujemy \"bazę\" z owoców Johna:" ] @@ -917,7 +1214,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -927,7 +1227,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Usuwamy imiona, nie są nam już potrzebne:" ] @@ -936,7 +1240,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -948,7 +1255,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Alternatywnie" ] @@ -957,7 +1268,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -966,7 +1280,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Sklejamy listę list w jedną listę:" ] @@ -975,7 +1293,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -991,7 +1312,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1000,7 +1324,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Mapujemy listę tupli na listę liczb" ] @@ -1009,7 +1337,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1025,7 +1356,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Finalnie redukujemy listę do sumy elementów:" ] @@ -1034,7 +1369,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1053,7 +1391,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1062,7 +1403,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Możemy także użyć gotowego operatora dodawania z modułu operator:" ] @@ -1071,7 +1416,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1090,14 +1438,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Słowniki (dict) - zaawansowane użycie" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Aktualizacja słownika innym słownikiem:" ] @@ -1106,7 +1462,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1127,7 +1486,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Dict Comprehension" ] @@ -1136,7 +1499,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1146,14 +1512,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Generatory i iteratory" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* Generatorów i iteratorów używamy, aby oszczędzić pamięć (a także czas potrzebny na jej alokację). \n", "* Zysk wydajności powstaje przez ominięcie potrzeby tworzenia tymczasowych struktur pośrednich w pamięci, gdy zamiast tego możemy przeiterować kolejno po elementach i finalnie zapisać tylko te, które są potrzebne.\n", @@ -1169,7 +1543,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Iteratory" ] @@ -1178,7 +1556,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1189,7 +1570,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1201,7 +1585,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1215,7 +1602,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1228,7 +1618,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1240,7 +1633,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1252,7 +1648,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1261,14 +1660,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Generator expression" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Generator można także wyrazić za pomocą konstrukcji ``(wyrażenie for zmienne in sekwencja)``:" ] @@ -1277,29 +1684,40 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ - "g = (i*i for i in range(10))" + "g = (i*i for i in range(10))\n", + "h = tuple([i*i for i in range(10)])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ - "type(g)" + "print(type(g))\n", + "type(h)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1310,7 +1728,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1319,7 +1740,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### metoda ``yield``" ] @@ -1328,7 +1753,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1345,7 +1773,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1356,7 +1787,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1367,7 +1801,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1378,7 +1815,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1387,14 +1827,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### List comprehension (jeszcze raz)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Technicznie więc ujmując **list comprehension = lista + wyrażenie generatora**:" ] @@ -1403,7 +1851,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1412,14 +1863,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "### Moduł itertools" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Szczególnie wart uwagi jest moduł itertools, który dostarcza bardzo wiele ciekawych narzędzi pracujących na iteratorach, pomocnych przy zaawansowanym programowaniu funkcyjnym. Wybrane ciekawe funkcje:" ] @@ -1428,7 +1887,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1440,7 +1902,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1451,7 +1916,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1462,7 +1930,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1473,7 +1944,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1484,7 +1958,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1498,7 +1975,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1509,18 +1989,10 @@ "print(list(iterator2))\n", "print(list(iterator))\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1536,7 +2008,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.3" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/L3.ipynb b/L3.ipynb index 2e426e5..8205cea 100644 --- a/L3.ipynb +++ b/L3.ipynb @@ -2,28 +2,44 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Język Python - Wykład 3" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Closures (Domknięcia)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "#### Domknięcie - funkcja wraz z otoczeniem referencyjnym (wszystkie zmienne z czasu utworzenia) - dostępne nawet po opuszczeniu otoczenia leksykalnego" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Funkcje zagnieżdzone:" ] @@ -32,7 +48,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -47,7 +66,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -56,7 +78,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Funkcje jako obiekty" ] @@ -65,7 +91,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -79,7 +108,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -88,7 +120,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Domknięcia" ] @@ -97,7 +133,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -113,7 +152,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -124,7 +166,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -135,7 +180,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -146,7 +194,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -157,18 +208,24 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ - "raised_to_4(2)" + "raised_to_4(3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -177,7 +234,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Domkniecia c.d." ] @@ -186,7 +247,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -205,7 +269,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -214,14 +281,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Domknięcie w Groovy" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " def localMethod() {\n", " def localVariable = new java.util.Date()\n", @@ -232,14 +307,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Domknięcie w JavaScript" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " function createMarker(point, number) {\n", " var marker = new GMarker(point);\n", @@ -256,7 +339,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Dekoratory" ] @@ -265,7 +352,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -280,7 +370,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -292,7 +385,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -303,7 +399,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -314,7 +413,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -325,7 +427,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -338,7 +443,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -349,7 +457,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -364,7 +475,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -378,7 +492,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -387,7 +504,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ " #Example ...\n", " @synchronized\n", @@ -398,14 +519,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Ciąg dalszy nastąpi za chwilę..." ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Obiektowość" ] @@ -414,7 +543,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -437,7 +569,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -448,7 +583,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -460,7 +598,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -473,7 +614,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -504,7 +648,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -536,7 +683,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -553,14 +703,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Nie ma pól i metod prywatnych, ale..." ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "### Pola zaczynające się od „__” mają nazwę zmienioną" ] @@ -569,7 +727,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -585,14 +746,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Metody Specjalne (wprowadzenie)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, "source": [ " __init__ - konstruktor\n", " __del__ - destruktor (nie korzystamy - bo garbage collector jest nieprzewidywalny)\n", @@ -605,7 +774,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -625,7 +797,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -642,7 +817,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -657,7 +835,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -682,7 +863,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -706,7 +890,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -725,7 +912,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -751,7 +941,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -762,7 +955,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Dekoratory, c.d." ] @@ -771,7 +968,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -787,7 +987,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -801,7 +1004,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -827,7 +1033,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -838,7 +1047,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -849,7 +1061,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -870,7 +1085,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -889,24 +1107,19 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ "t.classattr" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [] } ], "metadata": { + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -922,7 +1135,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.3" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/L4.ipynb b/L4.ipynb index e64e84d..6533cd5 100644 --- a/L4.ipynb +++ b/L4.ipynb @@ -2,21 +2,33 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Język Python - Wykład 4." ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Context Manager " ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Problem:\n", " \n", @@ -27,7 +39,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Rozwiązanie 1.\n", "\n", @@ -40,7 +56,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Rozwiązanie 2.\n", "\n", @@ -59,7 +79,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Rozwiązanie 3.\n", "\n", @@ -76,7 +100,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Rozwiązanie 4.\n", "\n", @@ -93,7 +121,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ " with expression [as (targets)]:\n", " code block with context of \"targets\"\n", @@ -111,7 +143,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -123,7 +158,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -132,7 +170,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Konstrukcja:\n", "\n", @@ -165,7 +207,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -186,7 +231,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -206,7 +254,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Context manager z użyciem dekoratora" ] @@ -215,7 +267,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -238,7 +293,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Przykład z tymczasowym folderem (za http://stackoverflow.com/questions/3012488/what-is-the-python-with-statement-designed-for)" ] @@ -247,7 +306,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -270,14 +332,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Metody specjalne c.d." ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### ``__repr__`` - the “official” string representation of an object" ] @@ -286,7 +356,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -302,7 +375,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -317,7 +393,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### ``__str__`` - the “informal” or nicely printable string representation of an object." ] @@ -326,7 +406,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -346,14 +429,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "W przypadku, gdy metoda __str__ nie jest zdefiniowana, wywoływana jest metoda __repr__" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### ``__hash__`` - (Hash values are integers. They are used to quickly compare dictionary keys during a dictionary lookup)" ] @@ -362,7 +453,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -375,7 +469,7 @@ " return str(self.x)+\" \"+str(self.y)\n", " \n", " def __eq__(self,other):\n", - " print(\"comparing to\" + str(other))\n", + " print(\"comparing to \" + str(other))\n", " return self.x == other.x and self.y == other.y\n", " \n", " def __hash__(self):\n", @@ -387,7 +481,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### ``__bool__`` - Called to implement truth value testing and the built-in operation" ] @@ -396,7 +494,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -407,7 +508,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -418,7 +522,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -429,7 +536,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -440,7 +550,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -454,7 +567,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -470,7 +586,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### ``__class__`` - klasa, do której należy instancja" ] @@ -479,7 +599,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -491,7 +614,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -502,7 +628,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -511,7 +640,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Emulacja typu kontenera (cd..)" ] @@ -520,7 +653,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -547,7 +683,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -558,7 +697,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -567,7 +709,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Porównanie" ] @@ -576,7 +722,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -590,7 +739,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -604,7 +756,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -618,7 +773,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -635,7 +793,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -650,7 +811,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Atrybuty" ] @@ -659,7 +824,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -679,7 +847,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -694,7 +865,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -716,7 +890,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -728,7 +905,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -739,7 +919,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -750,7 +933,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -761,7 +947,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -772,7 +961,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -783,7 +975,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -794,7 +989,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -805,7 +1003,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -814,7 +1015,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Dziedziczenie i MRO" ] @@ -823,7 +1028,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -835,7 +1043,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -846,7 +1057,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -857,7 +1071,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -868,7 +1085,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -879,7 +1099,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -890,7 +1113,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -901,7 +1127,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -912,7 +1141,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -932,9 +1164,9 @@ " def moo(self):\n", " pass\n", "class C(B1,B2):\n", - "# def foo(self):\n", - "# print(\"C\")\n", - " pass\n", + "# def foo(self):\n", + "# print(\"C\")\n", + " pass\n", "oc = C()\n", "oc.foo()\n", "print(C.__mro__)" @@ -942,14 +1174,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### MRO" ] }, { "cell_type": "raw", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " -----------\n", " | |\n", @@ -967,7 +1207,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -983,7 +1226,11 @@ }, { "cell_type": "raw", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ " 6\n", " ---\n", @@ -1012,7 +1259,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1027,7 +1277,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Wyjątki też są klasami!" ] @@ -1036,7 +1290,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1047,7 +1304,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1061,7 +1321,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1075,7 +1338,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1089,12 +1355,15 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ "try:\n", - " dict()[3]\n", + " a[3]\n", "except TypeError as e:\n", " print(type(e), e)\n", "except KeyError as e:\n", @@ -1105,7 +1374,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1124,7 +1396,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1138,7 +1413,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1149,7 +1427,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1160,7 +1441,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1171,25 +1455,19 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ "KeyboardInterrupt.__bases__" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { - "celltoolbar": "Raw Cell Format", + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1205,7 +1483,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.3" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/L5.ipynb b/L5.ipynb index cd45e9b..4bebe21 100644 --- a/L5.ipynb +++ b/L5.ipynb @@ -2,21 +2,33 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Język Python - Wykład 5" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Monkey-patching" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " from mock import MagicMock\n", " thing = ProductionClass()\n", @@ -30,7 +42,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -42,7 +57,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -62,7 +80,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -76,7 +97,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Mixin" ] @@ -85,7 +110,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -98,7 +126,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -114,7 +145,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -126,7 +160,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -139,7 +176,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "https://docs.python.org/3.5/library/socketserver.html" ] @@ -148,7 +189,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -162,7 +206,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -178,7 +225,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -190,21 +240,33 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Metaclass" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "(Opracowanie oparte na świetnym wpisie StackOverflow @e-satis: http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Tim Peters (ten od PEP 20 - Zen of Python oraz od timsort!)\n", "\n", @@ -219,14 +281,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Klasy jako obiekty" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Definicje klas służą nam zwykle jako kod, za pomocą którego tworzone są obiekty:\n" ] @@ -235,7 +305,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -247,7 +320,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -256,7 +332,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Ale klasy są także same w sobie... obiektami!" ] @@ -265,7 +345,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -274,7 +357,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Oznacza to, że obiekt reprezentujący klasę ma umiejętność samemu tworzenia (instancjonowania) innych obiektów. Z tego powodu jest właśnie klasą!\n", "\n", @@ -290,7 +377,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -302,7 +392,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -313,7 +406,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -324,7 +420,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -335,7 +434,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -347,14 +449,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Dynamiczne tworzenie klas" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Ponieważ klasy są obiektami, można je tworzyć dynamicznie (w run-time):" ] @@ -363,7 +473,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -382,7 +495,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -394,7 +510,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -403,7 +522,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "To podejście nie jest jednak w pełni dynamiczne, bo nadal jest gdzieś explicite napisany kod definiujący tę klasę.\n", "\n", @@ -412,16 +535,14 @@ "W Pythonie tworzenie obiektu klasy odbywa się explicite poprzez użycie funkcji type." ] }, - { - "cell_type": "raw", - "metadata": {}, - "source": [] - }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -432,7 +553,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -443,7 +567,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -454,7 +581,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -465,7 +595,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -478,7 +611,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -489,7 +625,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -501,7 +640,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -516,7 +658,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -527,14 +672,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Czym są metaklasy?" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "**Metaklasa jest tym czymś, co tworzy obiekt reprezentujący klasę w Pythonie.**\n", "\n", @@ -543,7 +696,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "```\n", "MyClass = MetaClass()\n", @@ -553,14 +710,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Prównajmy to z tym, co już wiemy o tworzeniu klas:" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "```\n", "MyClass = type('MyClass', (), {})\n", @@ -569,7 +734,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Z tego wynika, że samo **type** jest metaklasą w Pythonie. Co więcej jest ono domyślną metaklasą używaną zawsze standardowo, gdy Python stara się utworzyć jakąś klasę z jej deklaracji i definicji.\n", "\n", @@ -586,7 +755,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -598,7 +770,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -610,7 +785,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -622,7 +800,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -631,7 +812,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "W takim razie - jaka jest klasa obiektu reprezentującego klasę klasy? " ] @@ -640,7 +825,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -651,7 +839,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -662,7 +853,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "skip" + } }, "outputs": [], "source": [ @@ -671,28 +865,44 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "A więc podsumowując - metaklasa to nic innego jak \"fabryka klas\". **type** jest standardową metaklasą w Pythonie, ale Python pozwala nam ją podmienić jeśli chcemy!" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## ``metaclass``" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Za pomocą parametru ``metaclass`` można wskazać której metaklasy ma Python użyć do tworzenia tej klasy." ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "```\n", "class Foo(metaclass=some_metaclass):\n", @@ -702,7 +912,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Uwaga - jest to pewien hack języka. W momencie deklaracji klasy **class Foo()** tak naprawdę obiekt tej klasy nie jest jeszcze tworzony. Najpierw przeszukiwana jest jej definicja czy znajduje się tam **``metaclass``** - jeśli tak, jest dopiero wtedy używana do utworzenia obiektu/klasy Foo. Jeśli nie ma - użyty zostanie **type**.\n", "\n", @@ -723,14 +937,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Tworzenie własnej metaklasy" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Metaklas możemy potrzebować, jeśli chcemy modyfikować obiekty reprezentujące klasy podczas ich tworzenia. Jest to szczególnie pomocne przy tworzeniu API. Django ORM (modele) zostały utworzone właśnie z użyciem metaklas.\n", "\n", @@ -739,7 +961,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "**Metaklasą** (pomimo nazwy) może być cokolwiek, co da się wywołać (jest callable) i przyjmie argumenty takie same jak **type(name, bases, dict)**" ] @@ -748,7 +974,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -776,7 +1005,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -789,7 +1021,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -800,7 +1035,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -811,7 +1049,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -822,7 +1063,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -831,7 +1075,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Metaklasa nie nazywałaby się meta**klasą**, jeśli tego samego nie można by było osiągnąć używając **klasy** zamiast **funkcji**." ] @@ -840,7 +1088,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -874,7 +1125,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -895,14 +1149,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Metaklasy - raz jeszcze, krócej" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "1. Przechwytujemy akt tworzenia klasy\n", "2. Modyfikujemy nowo tworzoną klasę\n", @@ -911,14 +1173,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "## Zastosowanie metaklas" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Metaklasy w Pytonie to czarna magia, jeśli pytasz po co masz to stosować, to oznacza, że na pewno nie powinieneś tego stosować. Przypomnijmy raz jeszcze co powiedział Tim Peters:\n", "\n", @@ -927,7 +1197,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Jedynym sensownym użyciem metaklas jest tworzenie API. Raz jeszcze o django ORM:\n", "\n", @@ -944,7 +1218,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Zwykle nie ma sensu używać metaklas. Są zbyt skomplikowane. Klasy możemy spokojnie modyfikować z użyciem:\n", "\n", @@ -954,7 +1232,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Moduł abc --- Abstract Base Classes" ] @@ -963,7 +1245,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -974,7 +1259,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -986,7 +1274,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -997,7 +1288,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1009,7 +1303,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1027,7 +1324,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1039,7 +1339,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1050,7 +1353,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1061,7 +1367,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1073,7 +1382,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1082,20 +1394,29 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Zastosowanie metaklas do odrobaczania" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "http://www.dabeaz.com/py3meta/Py3Meta.pdf " ] } ], "metadata": { + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1111,7 +1432,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.3" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/L6.ipynb b/L6.ipynb index 1357f1e..fd4cec2 100644 --- a/L6.ipynb +++ b/L6.ipynb @@ -2,21 +2,33 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Język Python - Wykład 6" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Docstring" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* PEP 257" ] @@ -25,7 +37,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -38,7 +53,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -49,7 +67,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -62,7 +83,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -73,7 +97,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -88,7 +115,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Python *nie* wspiera docstringów dla zmiennych i atrybutów. " ] @@ -97,7 +128,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -111,14 +145,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Jednakże niektóre systemy dokumentowania kodu (np. sphinx, epydoc) potrafią parsując kod źródłowy użyć tak skonstruowanych docstringów (warning: it's a hack!)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## \"One more thing\" (dekoracja)" ] @@ -127,7 +169,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -147,7 +192,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -158,7 +206,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -169,7 +220,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -178,7 +232,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Bazinga!" ] @@ -187,7 +245,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -210,7 +271,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -220,7 +284,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "* przy pisaniu dekoratorów **powinniśmy** dekorować funkcję dekorującą dekoratorem wraps z argumentem funkcji dekorowanej\n", "* przypiszemy nowej funkcji wszystkie potrzebne atrybuty starej funkcji, żeby mogła ją całkowicie podmienić " @@ -228,7 +296,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Atrybuty i metody - mechanizm\n", "http://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/" @@ -236,7 +308,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "instance.foobar\n", "\n", @@ -245,7 +321,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Class.foobar\n", "\n", @@ -254,14 +334,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Idiomy" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Uruchamianie i import" ] @@ -270,7 +358,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -282,7 +373,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Warunki logiczne" ] @@ -291,7 +386,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -307,7 +405,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -318,16 +419,23 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ - "Przynależność" + "### Przynależność" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -341,7 +449,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -355,7 +466,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -370,7 +484,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -385,7 +502,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Składanie tekstu" ] @@ -394,7 +515,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -408,7 +532,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -422,7 +549,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### EAFP vs LBYL\n", "“It's Easier to Ask for Forgiveness than\n", @@ -434,7 +565,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -450,7 +584,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -464,7 +601,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### List comprehension" ] @@ -473,7 +614,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -487,7 +631,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -502,7 +649,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Upraszczanie wyboru" ] @@ -511,7 +662,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -529,7 +683,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -544,14 +701,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Wzorce projektowe" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Wbudowane:\n", " - iterator\n", @@ -560,7 +725,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "### Zasoby:\n", " https://github.com/faif/python-patterns" @@ -568,14 +737,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Singleton" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Definicja:\n", " - jeden obiekt danej klasy" @@ -583,7 +760,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Zastosowania:\n", " * potrzeba tylko jednego obiektu (np. połączenie do bazy danych, logger)\n", @@ -595,7 +776,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -610,7 +794,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -622,7 +809,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -633,7 +823,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -644,7 +837,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -655,7 +851,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -664,7 +863,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Dzielenie stanu" ] @@ -673,7 +876,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -689,7 +895,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -701,7 +910,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -713,7 +925,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -724,7 +939,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -733,28 +951,44 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "https://chromium.googlesource.com/external/googleappengine/python/+/master/google/pyglib/singleton.py" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Pułapki importowania" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "http://ncoghlan-devs-python-notes.readthedocs.org/en/latest/python_concepts/import_traps.html" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "project/\n", " setup.py\n", @@ -768,7 +1002,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "// These commands will most likely *FAIL* due to problems with the way\n", "//the import state gets initialised, even if the test code is correct\n", @@ -800,7 +1038,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -812,7 +1053,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -824,7 +1068,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -833,14 +1080,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### MVC" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Definicja:\n", " - model - DANE i LOGIKA BIZNESOWA (nie zależy od widoku i kontrolera)\n", @@ -852,7 +1107,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -878,7 +1136,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -895,7 +1156,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -921,7 +1185,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -937,7 +1204,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -954,7 +1224,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -964,7 +1237,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Factory method pattern" ] @@ -973,7 +1250,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -995,7 +1275,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1004,7 +1287,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Strategia" ] @@ -1013,7 +1300,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1031,7 +1321,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Observer" ] @@ -1040,7 +1334,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1068,7 +1365,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1092,18 +1392,10 @@ "p = Point(2.0, 3.0)\n", "p.scale(2.5)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1119,7 +1411,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.3" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/L7.ipynb b/L7.ipynb index 3ee1298..5a797ed 100644 --- a/L7.ipynb +++ b/L7.ipynb @@ -2,21 +2,33 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# Język Python - Wykład 7" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "Python3: \"A general goal is to reduce feature duplication by removing old ways of doing things\" (PEP 3100)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Różnice Python 2.x i 3.x\n", " - https://docs.python.org/3/whatsnew/3.0.html\n", @@ -26,7 +38,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ " - print vs print()\n", " - UTF i kodowanie\n", @@ -39,7 +55,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Ciąg znaków - przypomnienie" ] @@ -48,7 +68,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -59,7 +82,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -70,7 +96,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -79,7 +108,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Kodowanie znaków\n", "Unicode - konsorcjum/standard. Kodowania:\n", @@ -95,7 +128,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Pojęcia:\n", " - znak\n", @@ -106,7 +143,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Zastosowania\n", "### Terminal\n", @@ -125,7 +166,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### ASCII\n", " - kod 7-bitowy (1968, USA)\n", @@ -138,7 +183,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -149,7 +197,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -160,7 +211,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -171,7 +225,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -180,7 +237,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## klasa *bytes* \n", "ciągi 8-bitowych liczb z zakresu 0 <= x < 255" @@ -190,7 +251,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -201,7 +265,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -212,7 +279,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -223,7 +293,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -234,7 +307,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -246,7 +322,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -257,7 +336,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -268,7 +350,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -279,7 +364,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -290,7 +378,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -299,7 +390,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Windows 1250\n", " - Microsoft\n", @@ -312,7 +407,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -324,7 +422,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -336,7 +437,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -345,7 +449,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## ISO 8859-2 / ISO Latin2\n", " - standard ISO\n", @@ -358,7 +466,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -370,7 +481,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -382,7 +496,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -393,7 +510,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## UTF-8\n", " - standard UNICODE\n", @@ -405,7 +526,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -417,7 +541,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -427,7 +554,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## UTF-16\n", " - standard UNICODE\n", @@ -439,7 +570,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -451,7 +585,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -461,7 +598,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## UTF-32 / USC-4\n", " - stałej długości (4 bajty)" @@ -471,7 +612,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -483,7 +627,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -493,7 +640,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Hint\n", "Software should only work with Unicode strings internally, decoding the input data as soon as possible and encoding the output only at the end.\n", @@ -504,7 +655,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Python 3.x\n", " - Unicode domyślnie (w tym ASCII) - str\n", @@ -518,7 +673,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -529,7 +687,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -541,7 +702,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -552,7 +716,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -565,7 +732,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -576,7 +746,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -587,7 +760,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -598,7 +774,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -609,7 +788,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -618,7 +800,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "kodowanie pliku:\n", " #!/usr/bin/env python\n", @@ -629,7 +815,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -644,7 +833,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -659,7 +851,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -670,7 +865,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -681,7 +879,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -692,7 +893,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -703,7 +907,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -714,7 +921,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -725,7 +935,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -736,7 +949,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -747,7 +963,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -758,7 +977,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -769,7 +991,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Collation - definiuje porządek sortowania\n", " - https://en.wikipedia.org/wiki/Collation\n", @@ -778,7 +1004,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Python 2.x\n", " - ASCII domyślnie\n", @@ -790,7 +1020,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -802,7 +1035,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -815,7 +1051,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -827,7 +1066,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -850,7 +1092,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -867,7 +1112,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -884,7 +1132,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -898,7 +1149,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -913,7 +1167,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Varia\n", "http://www.laurentluce.com/posts/python-string-objects-implementation/\n", @@ -922,14 +1180,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## print" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Arguments (PEP 3105 -- Make print a function):\n", " - print is the only application-level functionality that has a statement (syntax!) dedicated to it. Syntax should cover only necessary items. \n", @@ -941,7 +1207,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -953,7 +1222,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -965,7 +1237,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -982,7 +1257,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -996,14 +1274,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### Chevron print" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Chevron (pl. szewron) - naszywka na rękawie lub naramienniku munduru, w kształcie prostej lub odwróconej litery \"V\"\n", "https://pl.wikipedia.org/wiki/Szewron_(naszywka) https://en.wikipedia.org/wiki/Chevron_(insignia)" @@ -1013,7 +1299,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1028,7 +1317,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1042,7 +1334,10 @@ { "cell_type": "markdown", "metadata": { - "collapsed": true + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } }, "source": [ "## map, filter, reduce" @@ -1050,7 +1345,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "### Views And Iterators Instead Of Lists" ] @@ -1059,7 +1358,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1073,7 +1375,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1085,7 +1390,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### map" ] @@ -1094,7 +1403,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1108,7 +1420,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1122,7 +1437,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1144,7 +1462,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1165,14 +1486,22 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### reduce" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "Python 3000 FAQ\n", "http://www.artima.com/weblogs/viewpost.jsp?thread=211200\n", @@ -1186,7 +1515,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1200,7 +1532,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1215,7 +1550,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1230,7 +1568,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### range" ] @@ -1239,7 +1581,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1253,7 +1598,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1264,7 +1612,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "### zip" ] @@ -1273,7 +1625,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1287,7 +1642,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1299,7 +1657,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## map, filter, reduce" ] @@ -1308,7 +1670,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1321,7 +1686,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1332,7 +1700,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## integers\n", "long renamed to int" @@ -1342,7 +1714,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1355,7 +1730,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1366,7 +1744,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, "source": [ "https://www.python.org/dev/peps/pep-0238/\n", "The current division (/) operator has an ambiguous meaning for\n", @@ -1396,7 +1778,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1408,7 +1793,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1420,7 +1808,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1432,7 +1823,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1444,7 +1838,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1453,7 +1850,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Wyjatki\n", "\n", @@ -1464,7 +1865,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1488,7 +1892,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1511,7 +1918,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "subslide" + } }, "outputs": [], "source": [ @@ -1526,7 +1936,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1566,7 +1979,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## List comprehension" ] @@ -1575,7 +1992,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1587,7 +2007,11 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "source": [ "## Rozpakowywanie krotek\n", "PEP 3113 -- Removal of Tuple Parameter Unpacking\n", @@ -1598,7 +2022,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1612,7 +2039,10 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "slideshow": { + "slide_type": "fragment" + } }, "outputs": [], "source": [ @@ -1623,18 +2053,10 @@ " return 0.5*(a+c),0.5*(b+d)\n", "print(middle( (1,0), (13,-4)))" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1650,7 +2072,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.4.3" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/README.md b/README.md index 2745b21..7d616b0 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,11 @@ Jeśli powyższa komenda nie działa, spróbuj Po wykonaniu powyższych czynności, w przeglądarce pod adresem `http://localhost:8888/` powinien odpowiadać IPython Notebook. +### RISE + +Po wykonaniu powyższych czynności można przeglądać zeszyty oraz interaktywnie wykonywać kod.
+Instalacja wtyczki RISE umożliwia przeglądanie wykładów w postaci interaktywnego pokazu slajdów.
+Opis instalacji tego dodatku znajduje się w pliku README_RISE.md
### Poprawki zauważonych błędów diff --git a/README_RISE.md b/README_RISE.md new file mode 100644 index 0000000..5a863d7 --- /dev/null +++ b/README_RISE.md @@ -0,0 +1,93 @@ +#####Instrukcja instalacji wtyczki RISE służącej do obsługi interaktywnego pokazu slajdów
+Konfigurację przeprowadzono z wykorzystaniem Pythona w wersji 3.5.1.
+Wszelnie uwagi na temat instalacji RISE pod Pythonem 2.X mile widziane
+W zależności od wersji IPythona należy pobrać repozytorium z odpowiedniej gałęzi:
+https://github.com/damianavila/RISE/releases + + +# UNIX + +1. Pobierz potrzebne pliki z repozytorium https://github.com/damianavila/RISE.git
+ ``` + git clone https://github.com/damianavila/RISE.git + ``` + +2. Instalacja polega na uruchomieniu skryptu `setup.py` z parametrem install.
+3. + ``` +cd RISE/ +python setup.py install +``` + + Jeżeli instalacja nie przebiega prawidowo (pojawiaja sie bledy dotyczace JUPYTERa),
+ Należy dodatkowo ustawić zmienna `JUPYTER_CONFIG_DIR`. Prawdopodobnie powinna wskazywać na
+ `~/.jupyter`, szczegolowy opis znaduje sie tutaj: http://jupyter-core.readthedocs.org/en/latest/paths.html

+`JUPYTER_CONFIG_DIR= python setup.py install`
+ + +#### Sprawdzenie instalacji: + +Po otwarciu w jupyter nootebook dowolnego wykładu w menu toolbar powinna pojawić
+się nowa ikona : "Enter/Exit Live Reveal Slideshow" (wygląda jak histogram)
+``` +cd +jupyter notebook LX.ipynb +``` + +##### !!! + Aby osiagnac najlepszy efekt zaleca sie wykonanie instrukcji
+ zawartej w dziale WAŻNE + +# Windows + +1. Pobierz potrzebne pliki z repozytorium https://github.com/damianavila/RISE.git
+ ``` + git clone https://github.com/damianavila/RISE.git + ``` + (jeżeli nie masz Gita - zainstaluj go)
+ +2. W tym przypadku nie jest konieczne ustawianie żadnych zmiennych,
+ należy przejć do folderu RISE i rozpoczć instalacje:
+ ``` + cd + python setup.py install + ``` + +3. Instalacja powinna zakończyć sie bez żadnych bledów
+ Aby zweryfikować, sprawdź czy możesz wlaczyc pokaz slajdów
+ tak jak opisano w Sprawdzenie instalacji w dziale powswieconym
+ instalacji na UNIX.

+ + +## WAŻNE + +Aby slajdy mieściły się w pełni na ekranie, konieczna jest modyfikacja
+parametru odpowiadającego za ich powiększenie (domyślnie równa 160%).
+
+Parametr jest ustawiony w pliku
+`/jupyter/nbextensions/livereveal/main.css`
+gdzie `` to miejsce w którym przechowywane są dane o aplikacjach
+(w to miejsce były kopiowane pliki po uruchomieniu skryptu `setup.py`)
+na przykład może to być
+`~/.local/share/` w przypadku systemu UNIX czy
+`C:\Users\\AppData\Roaming` w przypadku systemu Windows
+
+
+Jeżeli masz problemy ze znalezieniem wlasciwej scieżki, zmodyfikuj dowolny szablon
+z `/RISE` (na przyklad plik `/RISE/livereveal/reveal.js/css/theme/simple.css`)
+dodajac jakis komentarz który nie zmieni jego dzialania. Nastepnie uruchom ponownie
+skrypt `setup.py`. W konsoli powinny pojawić sie scieżki:
+1. Scieżka do /RISE
+2. Szukana sciezka (do niej kopiowany jest nowy plik simple.css)
+ +Modyfikację należy wprowadzić w linii 67, ustawiając parametr:
+`font-size: 100%;` + + +Po wykonaniu powyższych czynności można cieszyć się interaktywnym pokazem slajdów.
+ +Przydatne linki:
+https://github.com/agh-glk/python-lecture
+https://github.com/damianavila/RISE
+https://github.com/damianavila/RISE/releases
+https://github.com/damianavila/RISE.git