Slide 1

Slide 1 text

Python Distilled ࢼҿձ Hayao Suzuki BPStudy #195 November 30, 2023

Slide 2

Slide 2 text

ࣗݾ঺հ ͓લ୭Α Name Hayao Suzukiʢླ໦ɹॣʣ ///////// Twitter X @CardinalXaro Work Software Developer @ BeProud Inc. › גࣜձࣾϏʔϓϥ΢υ › IT ษڧձࢧԉϓϥοτϑΥʔϜ › Python ಠֶϓϥοτϑΥʔϜ › γεςϜ։ൃυΩϡϝϯταʔϏε 2 / 60

Slide 3

Slide 3 text

ࣗݾ঺հ ൃදͨ͠τʔΫʢൈਮʣ › SymPy ʹΑΔ਺ࣜॲཧ (PyCon JP 2018) › ΠϯϝϞϦʔετϦʔϜ׆༻ज़ (PyCon JP 2020) › ૊ΈࠐΈؔ਺ pow ͷ஌ΒΕ͟ΔਐԽ (PyCon JP 2021) › Let’s implement useless Python objects(PyCon APAC 2023) https://xaro.hatenablog.jp/ ʹҰཡ͕͋Γ·͢ɻ 3 / 60

Slide 4

Slide 4 text

ࣗݾ঺հ ຋༁ͨ͠ຊ › Python Distilled(O’Reilly Japan) ຊ೔ͷओ໾ ؂༁ͨ͠ຊ › ೖ໳ Python 3 ୈ 2 ൛ (O’Reilly Japan) › ϩόετ Python(O’Reilly Japan) 4 / 60

Slide 5

Slide 5 text

ࠓ೔ͷςʔϚ 5 / 60

Slide 6

Slide 6 text

ࠓ೔ͷςʔϚ 6 / 60

Slide 7

Slide 7 text

Python Distilled ݪஶɿPython Distilled ஶऀ David M. Beazley ग़൛೥ 2021 ೥ 9 ݄ ग़൛ࣾ Addison-Wesley(Pearson) ๜༁ɿPython Distilled ϓϩάϥϛϯάݴޠ Python ͷΤοηϯε ༁ऀ ླ໦ ॣ ग़൛೥ 2023 ೥ 10 ݄ ग़൛ࣾ ΦϥΠϦʔɾδϟύϯ Pearson ͱͷܖ໿্ɺ๜༁ͷදࢴ͸ಈ෺Ͱ͸ͳ͍ɻ 7 / 60

Slide 8

Slide 8 text

຋༁ͷྲྀΕ ຋༁ग़൛·Ͱͷي੻ › 2022 ೥ 4 ݄ ڵຯຊҐͰݪஶిࢠ൛Λߪೖ › 2022 ೥ 5 ݄ ΦϥΠϦʔͷฤूऀʹݪஶΛ঺հ͢ΔʢࡶஊϨϕϧʣ › 2022 ೥ 6 ݄ ຋༁൛ݖऔಘʹ޲͚ͯಈ͖ग़͢ › 2022 ೥ 7 ݄ ຋༁൛ݖऔಘɺ຋༁ͷଧ਍ɺ຋༁ʹ௅ઓ͠Α͏ͱܾҙ › 2022 ೥ 9 ݄ ຋༁Λ։࢝͢Δʢϩόετ Python ͷ؂༁ͱฒߦʣ › 2023 ೥ 4 ݄ Ұ௨Γ຋༁͕׬ྃɺਪᏏͷ೔ʑ › 2023 ೥ 9 ݄ ຋༁࡞ۀ׬ྃ 8 / 60

Slide 9

Slide 9 text

Python Distilled ͬͯͲΜͳຊʁ ݪஶऀʮ͸͡ΊʹʯΑΓ ͜ͷʰPython Distilledʱ͸ Python ʹΑΔϓϩάϥϛϯάʹ͍ͭͯͷॻ੶Ͱ͢ɻ Python ͰՄೳͳ͜ͱ΍ɺ͋Δ͍͸ߦΘΕͨ͜ͱΛ͢΂ͯจॻԽ͠Α͏ͱ͍͏Θ͚Ͱ ͸͋Γ·ͤΜɻຊॻͷ໨త͸ɺݱ୅తͰ͋Γݫબɺͭ·Γৠཹʢdistilledʣ͞Εͨϓ ϩάϥϛϯάݴޠ Python ͷ֩৺Λ঺հ͢Δ͜ͱͰ͢ɻ ʢதུʣ͔͠͠ɺͦΕ͸·ͨɺ ιϑτ΢ΣΞϥΠϒϥϦΛॻ͖ɺPython ͷԿͨΔ͔Λ஌ΓɺԿ͕࠷΋໾ʹཱ͔ͭΛ ݟग़ͨ݁͠ՌͰ΋͋ΔͷͰ͢ɻ 9 / 60

Slide 10

Slide 10 text

ͭ·ΓɺͲΜͳຊʁ ҰݴͰ·ͱΊΔͱ ϓϩάϥϛϯάݴޠ Python ͦͷ΋ͷʹಛԽͨ͠ຊ 10 / 60

Slide 11

Slide 11 text

ॻධ ///////// Twitter X Ͱݟ͔͚ͨॻධ No human should be allowed to write Python code before reading it. ौ઒͞ΜʹΑΔॻධ ண࣮ʹ Python ΛࣗΒͷ݂೑ʹ͍͖͍ͯͨ͠ਓ޲͚ͷຊͰ͢ɻ 11 / 60

Slide 12

Slide 12 text

Python ͷֶͼํ ܅ͨͪ͸Ͳ͏ Python ΛֶͿ͔ 12 / 60

Slide 13

Slide 13 text

Python ͷֶͼํ https://docs.python.org/ja/3/ 13 / 60

Slide 14

Slide 14 text

Python ͷֶͼํ Python ͸ެࣜυΩϡϝϯτ͕ॆ࣮ › https://docs.python.org/ja/3/ ΞϨ͸Ͳ͜ʹॻ͍ͯ͋Δͷʁ ͦ͏ͦ͏ɺΞϨͩΑɺΞϨɺ͋ͦ͜ʹ͋ΔΑɻ ൃදऀ͸਌ͷӨڹͰத೔ϑΝϯͰ͕ͨ͠ɺ࠷ۙ͸·ͬͨ͘໺ٿΛݟ͍ͯ·ͤΜɻ 14 / 60

Slide 15

Slide 15 text

ಥવͷΫΠζ Python ͷΞϨɺͲ͜ʹॻ͍ͯ͋Δ͔ͳ ΫΠζʂ 15 / 60

Slide 16

Slide 16 text

ୈ 1 ໰ ໰୊ɿγϯάϧτϯͷൺֱ None ΍ TrueɺFalse ͸γϯάϧτϯͰ͋Γɺγϯάϧτϯ͸ is จͰൺֱ͠·͢ɻ ͜ͷ஫ҙࣄ߲͸υΩϡϝϯτͷͲ͜ʹॻ͔Ε͍ͯΔͰ͠ΐ͏͔ʁ 16 / 60

Slide 17

Slide 17 text

ୈ 1 ໰ ໰୊ɿγϯάϧτϯͷൺֱ None ΍ TrueɺFalse ͸γϯάϧτϯͰ͋Γɺγϯάϧτϯ͸ is จͰൺֱ͠·͢ɻ ͜ͷ஫ҙࣄ߲͸υΩϡϝϯτͷͲ͜ʹॻ͔Ε͍ͯΔͰ͠ΐ͏͔ʁ ղ౴ɿ2 Օॴ › ݴޠϦϑΝϨϯεʢ஫ҙשىʣ › PEP 8ʢ؆୯ͳཧ༝΋ʣ ࣮࣭తʹ͸ PEP 8 ͚ͩͱ΋ݴ͑Δɻ 17 / 60

Slide 18

Slide 18 text

ୈ 2 ໰ ໰୊ɿؔ਺ͷσϑΥϧτҾ਺ ؔ਺ͷσϑΥϧτҾ਺Λ࢖͏ࡍ͸ΠϛϡʔλϒϧͳΦϒδΣΫτΛ࢖͍·͢ɻ͜ͷ஫ ҙࣄ߲͸υΩϡϝϯτͷͲ͜ʹॻ͔Ε͍ͯΔͰ͠ΐ͏͔ʁ 18 / 60

Slide 19

Slide 19 text

ୈ 2 ໰ ໰୊ɿؔ਺ͷσϑΥϧτҾ਺ ؔ਺ͷσϑΥϧτҾ਺Λ࢖͏ࡍ͸ΠϛϡʔλϒϧͳΦϒδΣΫτΛ࢖͍·͢ɻ͜ͷ஫ ҙࣄ߲͸υΩϡϝϯτͷͲ͜ʹॻ͔Ε͍ͯΔͰ͠ΐ͏͔ʁ ղ౴ɿ2 Օॴ › νϡʔτϦΞϧʢ஫ҙשىʣ › ϓϩάϥϛϯά FAQʢσϑΥϧτҾ਺ͷ࢓૊Έʹ͍ͭͯʣ 19 / 60

Slide 20

Slide 20 text

ୈ 3 ໰ ໰୊ɿwith จ Python 2.5 ͔Β with จ͕ಋೖ͞Ε·ͨ͠ɻwith จͷ࢖͍ํ͸Ͳ͜ʹॻ͔Ε͍ͯ ΔͰ͠ΐ͏͔ʁ 20 / 60

Slide 21

Slide 21 text

ୈ 3 ໰ ໰୊ɿwith จ Python 2.5 ͔Β with จ͕ಋೖ͞Ε·ͨ͠ɻwith จͷ࢖͍ํ͸Ͳ͜ʹॻ͔Ε͍ͯ ΔͰ͠ΐ͏͔ʁ ղ౴ɿ3 Օॴ › νϡʔτϦΞϧʢଘࡏΛࣔࠦ͢Δ͚ͩʣ › ݴޠϦϑΝϨϯεʢwith จͷߏจͱίϯςΩετϚωʔδϟʹ͍ͭͯʣ › PEP 343ʢwith ͷಋೖܦҢ΍എܠʹ͍ͭͯʣ 21 / 60

Slide 22

Slide 22 text

ୈ 4 ໰ ໰୊ɿ__init__() ͱ__new__() ΫϥεͷΠϯελϯεΛ࣮ࡍʹੜ੒͢Δͷ͸__new__()ɺΠϯελϯεͷॳظԽ ͸__init__() Ͱ͢ɻ͜ͷؔ܎ʹ͍ͭͯॻ͔Ε͍ͯΔͷ͸Ͳ͜Ͱ͠ΐ͏͔ʁ 22 / 60

Slide 23

Slide 23 text

ୈ 4 ໰ ໰୊ɿ__init__() ͱ__new__() ΫϥεͷΠϯελϯεΛ࣮ࡍʹੜ੒͢Δͷ͸__new__()ɺΠϯελϯεͷॳظԽ ͸__init__() Ͱ͢ɻ͜ͷؔ܎ʹ͍ͭͯॻ͔Ε͍ͯΔͷ͸Ͳ͜Ͱ͠ΐ͏͔ʁ ղ౴ɿ1 Օॴ › ݴޠϦϑΝϨϯε __init__() ͸ίϯετϥΫλ͡Όͳ͍Αʂ 23 / 60

Slide 24

Slide 24 text

ୈ 5 ໰ ໰୊ɿfrom module import * from module import *͕Մೳͳͷ͸ϞδϡʔϧϨϕϧͷΠϯϙʔτͰɺΫϥε΍ؔ ਺಺෦Ͱ͸Ͱ͖·ͤΜɻ͜ͷࣄ࣮ʹ͍ͭͯॻ͔Ε͍ͯΔͷ͸Ͳ͜Ͱ͠ΐ͏͔ʁ 24 / 60

Slide 25

Slide 25 text

ୈ 5 ໰ ໰୊ɿfrom module import * from module import *͕Մೳͳͷ͸ϞδϡʔϧϨϕϧͷΠϯϙʔτͰɺΫϥε΍ؔ ਺಺෦Ͱ͸Ͱ͖·ͤΜɻ͜ͷࣄ࣮ʹ͍ͭͯॻ͔Ε͍ͯΔͷ͸Ͳ͜Ͱ͠ΐ͏͔ʁ ղ౴ɿ1 Օॴ › ݴޠϦϑΝϨϯε ͨͩ͠ɺfrom module import *͸࢖͏ͳͱ஫ҙשى͞Ε͍ͯΔ 25 / 60

Slide 26

Slide 26 text

Python ͷֶͼํ Python ͸ެࣜυΩϡϝϯτ͕ॆ࣮ › େମެࣜυΩϡϝϯτ΍ PEP ʹॻ͔Ε͍ͯΔ › νϡʔτϦΞϧͱඪ४ϥΠϒϥϦ͚ͩͰԿͱ͔ͳΔ ެࣜυΩϡϝϯτ͸๲େ͗͢Δ › ಥͬࠐΜͩ಺༰ͩͱݴޠϦϑΝϨϯε΍ PEP Λ୳Δ͜ͱʹͳΔ › ݴޠϦϑΝϨϯε͸ʮ͚ͦͬͳ͍ॻ͖ํʯ ɺಡΈ෺తʹಡΊͳ͍ɻ 26 / 60

Slide 27

Slide 27 text

Python ͷֶͼํ ॻ੶͔ΒֶͿɿೖ໳ॻ › جຊతʹ͸ॳ৺ऀ޲͖ɺಥͬࠐΜͩ಺༰ʹ͸৮Ε͍ͯͳ͍ › චऀͷ޻෉ͱͯ͠औࣺબ୒͕ߦΘΕ͍ͯΔ ೖ໳ॻͷ۩ମྫ › ʰೖ໳ Python 3 ୈ 2 ൛ʱ ʢ800 ϖʔδʣ ɺೖ໳෦෼͸ 270 ϖʔδ › ʰPython νϡʔτϦΞϧ ୈ 4 ൛ʱ ʢ264 ϖʔδʣ ɺఈຊ͸ެࣜυΩϡϝϯτ 27 / 60

Slide 28

Slide 28 text

Python ͷֶͼํ ॻ੶͔ΒֶͿɿ ʢൺֱతʣߴ͍Ϩϕϧͷຊ › Python ݴޠΛ໢ཏ͠Α͏ͱ͍ͯ͠Δ › ඞવతʹ෼ް͘ͳΓɺಡΈ௨͢ͷ͕େม ߴ͍Ϩϕϧͷ۩ମྫ › ʰॳΊͯͷ Python ୈ 3 ൛ʱ ʢ808 ϖʔδʣ ɺݪॻୈ 5 ൛͸ 1648 ϖʔδ › ʰFluent Pythonʱ ʢ832 ϖʔδʣ ɺݪॻୈ 2 ൛͸ 983 ϖʔδ 28 / 60

Slide 29

Slide 29 text

Python ͷֶͼํ Πϯλʔωοτɺ·ͨ͸ݕࡧͰ୳͢ › ۄੴࠞ߹ › ݁ہ͸ެࣜυΩϡϝϯτʹམͪண͘ › ௐ΂͍ͨ͜ͱ͕Θ͔͍ͬͯͳ͍ͱ࢖͑ͳ͍ ඼࣭͕ߴ͍ Web ࢿྉ › ʰPython Boot Camp Textʱॳ৺ऀ޲͚νϡʔτϦΞϧΠϕϯτͷࢿྉ › ʰPython TutorʱPython ͷಈ͖Λࢹ֮తʹ֬ೝͰ͖ΔαΠτ 29 / 60

Slide 30

Slide 30 text

Python ͷֶͼํ ࠷ۙͷྲྀߦΓɿGPTs ʹฉ͍ͯΈΔ › Զͨͪͷ ChatGPT ઌੜ › ௐ΂͍ͨ͜ͱ͕Θ͔͍ͬͯͳ͍ͱ࢖͑ͳ͍ › ͖ͨͨ୆ͱͯ͠࠷ద › ͋Δఔ౓ Python ΛΘ͔͍ͬͯͳ͍ͱ࢖͍͜ͳͤͳ͍ʢࢲݟʣ ΤϨϛϠ 14:14ʢ੟ॻڠձڞಉ༁ΑΓʣ ओ͸ࢲʹݴΘΕͨɻ ʮ༬ݴऀͨͪ͸ɺࢲͷ໊ʹΑِͬͯΓͷ༬ݴΛ͍ͯ͠Δɻࢲ͸൴Β ΛݣΘͨ͜͠ͱ΋ͳ͘ɺ൴Βʹ໋ͨ͜͡ͱ΋ͳ͘ɺ൴Βʹޠͬͨ͜ͱ΋ͳ͍ɻ൴Β͸ِ Γͷݬͱۭ͍͠઎͍ͱࣗ෼ͷ৺ͷ͖ٗΛ͋ͳ͕ͨͨʹ༬ݴ͍ͯ͠Δͷͩɻ 30 / 60

Slide 31

Slide 31 text

Python ͷֶͼํ Python Distilled › Python ݴޠͦͷ΋ͷʹಛԽͨ͠ຊ › ݴޠϦϑΝϨϯεʹॻ͍ͯ͋Δ͜ͱ͕ 336 ϖʔδʹ·ͱ·͍ͬͯΔ Python Distilled ʹॻ͍͍ͯͳ͍͜ͱ › ܕώϯτपΓʢ ʰϩόετ Pythonʱಡ΋͏ʣ › ඇಉظॲཧ › 3rd ύʔςΟϥΠϒϥϦɺΤίγεςϜपΓ 31 / 60

Slide 32

Slide 32 text

FAQ ຊ౰ʹΑ͋͘Δ࣭໰ ʰPython Distilledʱͱʰೖ໳ Python 3 ୈ 2 ൛ʱͷҧ͍͸ʁ Python Distilled ʹॻ͍͍ͯͳ͍͜ͱ › ʰೖ໳ Python 3 ୈ 2 ൛ʱ͸ΤίγεςϜ΋͔ͬ͠Γ৮Ε͍ͯΔ › ʰPython Distilledʱ͸ݴޠίΞʹಛԽͨ͠ຊ 32 / 60

Slide 33

Slide 33 text

Python Distilled ݁ہɺԿ͕ॻ͍ͯ͋Δͷʁ 33 / 60

Slide 34

Slide 34 text

1 ষ Python ͷجૅ 1 ষ Python ͷجૅ › ม਺΍σʔλܕɺࣜɺ੍ޚߏ଄ɺؔ਺ɺΫϥεɺೖग़ྗʹ͍ͭͯͷ֓આ › ݪॻ͸ Python 3.8 Ҏ߱Λ૝ఆɺ຋༁Ͱ͸ 3.11 ·ͰରԠͰ͖ΔΑ͏ʹͨ͠ › Θ͔Δਓ͸ඈ͹ͯ͠΋େৎ෉ 34 / 60

Slide 35

Slide 35 text

1 ষ Python ͷجૅ ྫɿελοΫϕʔεͷܭࢉػ େ൒ͷ৔߹ɺܧঝ͸࠷ྑͷղܾࡦͰ͸͋Γ·ͤΜɻྫ͑͹ɺ୯७ͳελοΫϕʔεͷܭ ࢉػΛ࡞Γ͍ͨͱ͠·͢ɻ ຋༁࣌ʹ๊͍ͨݒ೦ › ʮελοΫϕʔεͷܭࢉػʯ͸આ໌ͳ͠Ͱ௨͡Δͷ͔ › ٯϙʔϥϯυه๏ͷઆ໌Λ௥Ճ͢Δ΂͖͔ 35 / 60

Slide 36

Slide 36 text

2 ষ ԋࢉࢠɺࣜɺσʔλૢ࡞ 2 ষ ԋࢉࢠɺࣜɺσʔλૢ࡞ › ࣜɺԋࢉࢠɺධՁنଇʹ͍ͭͯ › جຊతͳσʔλߏ଄ʹ͍ͭͯ΋આ໌ 36 / 60

Slide 37

Slide 37 text

2 ষ ԋࢉࢠɺࣜɺσʔλૢ࡞ ҉໧తͳਅِ஋ධՁͷ᠘ def f(x, items=None): if not items: items = [] items.append(x) return items 37 / 60

Slide 38

Slide 38 text

2 ষ ԋࢉࢠɺࣜɺσʔλૢ࡞ ࣮ߦྫ >>> f(4) [4] >>> a = [] >>> f(3, a) [3] >>> a # ߋ৽͞Εͳ͍ʂ [] 38 / 60

Slide 39

Slide 39 text

3 ষ ϓϩάϥϜͷߏ଄ͱ੍ޚߏ଄ 3 ষ ϓϩάϥϜͷߏ଄ͱ੍ޚߏ଄ › ৚݅෼ذɺϧʔϓɺྫ֎ɺίϯςΩετϚωʔδϟʹ͍ͭͯ › ʮ3.4 ྫ֎ʯ͸ྫ֎ͳ͘ಡ΋͏ʂ 39 / 60

Slide 40

Slide 40 text

3 ষ ϓϩάϥϜͷߏ଄ͱ੍ޚߏ଄ ྫɿྫ֎஋Λอ࣋͢Δม਺ͷੜଘൣғ try: int("N/A") except ValueError as e: print("Failed:", e) print(e) # NameError 40 / 60

Slide 41

Slide 41 text

3 ষ ϓϩάϥϜͷߏ଄ͱ੍ޚߏ଄ ྫɿྫ֎ͷ࿈࠯ try: x = int("N/A") except Exception as e: raise ApplicationError("It failed") from e ྫɿ૝ఆ֎ͷ࿈࠯ try: x = int("N/A") except Exception as e: print("It failed:", err) # NameError 41 / 60

Slide 42

Slide 42 text

3 ষ ϓϩάϥϜͷߏ଄ͱ੍ޚߏ଄ __cause__ଐੑͱ__context__ଐੑ › __cause__ଐੑ͸ҙਤͯ͠ྫ֎Λ࿈࠯ͨ࣌͠ʹࢀর͢Δ › __context__ଐੑ͸ྫ֎ॲཧதͷ૝ఆ֎ͷྫ֎ൃੜ࣌ͷ৘ใݯ 42 / 60

Slide 43

Slide 43 text

4 ষ ΦϒδΣΫτɺܕɺϓϩτίϧ 4 ষ ΦϒδΣΫτɺܕɺϓϩτίϧ › Python ͷجຊతͳΦϒδΣΫτϞσϧͱϝΧχζϜʹ͍ͭͯ › PyCon APAC 2023 ͷൃදͷݩωλͷ 1 ͭ 43 / 60

Slide 44

Slide 44 text

4 ষ ΦϒδΣΫτɺܕɺϓϩτίϧ ྫɿࢀরΧ΢ϯτ >>> a = 37 # ஋ 37 Λ࣋ͭΦϒδΣΫτΛ࡞੒͢Δ >>> b = a # ΦϒδΣΫτͷࢀরΧ΢ϯτ૿Ճ >>> c = [] >>> c.append(b) # ΦϒδΣΫτͷࢀরΧ΢ϯτ૿Ճ 44 / 60

Slide 45

Slide 45 text

4 ষ ΦϒδΣΫτɺܕɺϓϩτίϧ ྫɿࢀরͱίϐʔ >>> a = [1, 2, 3, 4] >>> b = a # b ͸ a ͷࢀর >>> b is a True >>> b[2] = -100 # b ͷཁૉΛมߋ͢Δ >>> a # a ͷཁૉ΋มߋ͞ΕΔ [1, 2, -100, 4] 45 / 60

Slide 46

Slide 46 text

4 ষ ΦϒδΣΫτɺܕɺϓϩτίϧ ྫɿ੔਺ܕͱුಈখ਺఺਺ܕ >>> a = 42 >>> b = 3.7 >>> a.__add__(b) NotImplemented >>> b.__radd__(a) 45.7 46 / 60

Slide 47

Slide 47 text

5 ষ ؔ਺ 5 ষ ؔ਺ › ؔ਺ఆٛɺద༻ɺείʔϓɺΫϩʔδϟɺσίϨʔλɺؔ਺ܕϓϩάϥϛϯά › 5.16 અͱ 5.17 અͷίʔϧόοΫؔ਺ʹؔ͢Δઆ໌͸಺༰͕ೱ͍ 47 / 60

Slide 48

Slide 48 text

5 ষ ؔ਺ ྫɿಈతͳؔ਺ੜ੒ def make_init(*names): params = ", ".join(names) code = f"def __init__(self, {params}):\n" for name in names: code += f" self.{name} = {name}\n" d = {} exec(code, d) return d["__init__"] NamedTuple ΍@dataclass Ͱ׆༻͞Ε͍ͯΔςΫχοΫ 48 / 60

Slide 49

Slide 49 text

6 ষ δΣωϨʔλ 6 ষ δΣωϨʔλ › δΣωϨʔλͷجૅ͔ΒԠ༻·Ͱ › ʮίϧʔνϯʯͷྺ࢙΋ 49 / 60

Slide 50

Slide 50 text

6 ষ δΣωϨʔλ ྫɿδΣωϨʔλͷҕৡ def flatten(items): for i in items: if isinstance(i, list): yield from flatten(i) else: yield i a = [1, 2, [3, [4, 5], 6, 7], 8] for x in flatten(a): print(x, end=" ") 50 / 60

Slide 51

Slide 51 text

6 ষ δΣωϨʔλ ྫɿ֦ுδΣωϨʔλ def receiver(): print("Ready to receive") while True: n = yield print("Got", n) >>> r = receiver() >>> r.send(None) Ready to receive >>> r.send("Hello") Got Hello >>> r.close() 51 / 60

Slide 52

Slide 52 text

7 ষ Ϋϥε 7 ষ Ϋϥε › Ϋϥεʹؔ͢Δ֓೦Λτοϓμ΢ϯͰֶͿ › ౸ୡ఺͸૬౰ϚχΞοΫ͕ͩɺ஌͍ͬͯΔͱ໾ʹཱͭ͜ͱ΋͋Δ͔΋͠Εͳ͍ 52 / 60

Slide 53

Slide 53 text

7 ষ Ϋϥε ϝιουղܾॱংͷϧʔϧ 1 ೿ੜΫϥε͸ৗʹجఈΫϥεΑΓ΋ઌʹνΣοΫ͞ΕΔ 2 جఈΫϥε͕ෳ਺͋Δ৔߹͸ɺܧঝͨ͠ॱʹνΣοΫ͞ΕΔ ྫɿC ̏ઢܕԽΞϧΰϦζϜͰܾఆͰ͖ͳ͍ྫ class X: pass class Y(X): pass class Z(X, Y): pass # TypeError 53 / 60

Slide 54

Slide 54 text

8 ষ Ϟδϡʔϧͱύοέʔδ 8 ষ Ϟδϡʔϧͱύοέʔδ › Ϟδϡʔϧͷ֓೦͕য఺ › ύοέʔδϯάʹ͍ͭͯ͸৮Ε͍ͯͳ͍ 54 / 60

Slide 55

Slide 55 text

8 ষ Ϟδϡʔϧͱύοέʔδ import module ͱ from module import func ͷҧ͍ › import module ͸৽ͨʹ໊લۭؒΛੜ੒͢Δ › from module import func ͸࣮ߦ͞Ε໊ͨલۭؒʹ func Λ௥Ճ͢Δ from module import func ͷํ͕଎͍ʁ › ؾͷ͍ͤͰ͢ › Python ͕ཪଆͰ import module Λ͢ΔͷͰɺؔ܎͋Γ·ͤΜ 55 / 60

Slide 56

Slide 56 text

9 ষ ೖྗͱग़ྗ 9 ষ ೖྗͱग़ྗ › I/O ॲཧʹඞཁͳςΫχοΫͱந৅Խ › ޙ൒ͷ I/O ϥΠϒϥϦͷ֓ཁ͸ྲྀ͠ಡΈͰ OK 56 / 60

Slide 57

Slide 57 text

9 ষ ೖྗͱग़ྗ ྫɿopen() ؔ਺ͷཪଆ import io raw = io.FileIO("filename.txt", "r") # ੜόΠφϦϞʔυ buffered = io.BufferedReader(raw) # όοϑΝ෇͖όΠφϦಡΈࠐΈ file = io.TextIOWrapper(buffered, encoding="utf-8") # ςΩετϞʔυ 57 / 60

Slide 58

Slide 58 text

10 ষ ૊ΈࠐΈؔ਺ͱඪ४ϥΠϒϥϦ 10 ষ ૊ΈࠐΈؔ਺ͱඪ४ϥΠϒϥϦ › ૊ΈࠐΈؔ਺ͱඪ४ϥΠϒϥϦɺ૊ΈࠐΈྫ֎ͷҰཡ › ྲྀ͠ಡΈͰ OK 58 / 60

Slide 59

Slide 59 text

·ͱΊ ·ͱΊ › ݴޠϦϑΝϨϯεΛಡΊ͹େମॻ͍ͯ͋Δ › ͔͠͠ɺݴޠϦϑΝϨϯεΛಡΈ௨͢ͷ͸೉͍͠ › ʰPython DistilledʱͰຊ౰ʹඞཁͳͱ͜Ζ͚ͩखʹೖΕΑ͏ 59 / 60

Slide 60

Slide 60 text

·ͱΊ ͬͦ͘͞ߪೖ͠Α͏ › https://www.oreilly.co.jp/books/9784814400461/ › https://www.ohmsha.co.jp/book/9784814400461/ ΦϥΠϦʔֶशϓϥοτϑΥʔϜͱ͸ › https://www.oreilly.co.jp/online-learning/ › 6 ສ࡭Ҏ্ͷॻ੶ͱ 3 ສ࣌ؒҎ্ͷಈըʢ೔ຊޠ΋͋Δʂʣ › ۀքΤΩεύʔτʹΑΔϥΠϒΠϕϯτ › ΠϯλϥΫςΟϒͳγφϦΦͱαϯυϘοΫεΛ࢖࣮ͬͨફతͳֶश › ެࣜೝఆࢼݧରࡦࢿྉ › ʰPython Distilledʱ΋ΦϥΠϦʔֶशϓϥοτϑΥʔϜͰಡΈ์୊ʢ͍͢͝ʣ 60 / 60