3ãããïŒPythonãšyieldãšã¡ã¢ãª
ã¡ã¢ãªãšããããã話ããŸããŸãèŠæã§ãïŒ
NSã£ãŠããã®ã¯ç¥ã§ããªãã§ããããŸããããŸããŠã俺ã«ã¯é«ªããããŸããã
ãã ããã®ãããã¯ãŒã¯æ
å ±åŠéšã«ãããŠNSãç¥æ ŒåãããŠããã®ã¯ãããããšæããŸãïŒä¿ºãã°ã«ãŒãã¯ãŒã¯å
šç¶ããŠãªããã§ãããããå調æ§ãšããããŸãªãã§ããïŒããšãNSã¯ããã°ã©ãã³ã°ãšããããã¯Webã¢ããªãäœããšããããšãããã®ã§ãããžãã¯ãèããã®ã¯ãããPCã®äººã®æ¹ãåŸæã ã£ãããšããããšæããŸãã
ãŸããSDâNSã履修ãçµãããšããæ ¹æ§ãšãã¯èªããã¹ãéšåã ãšæããŸãããããããããã°ã©ãã³ã°ã£ãŠäœïŒ
ãããªããšããPythonã§æ©æ¢°åŠç¿ãããŠããã¡ã¢ãªäžè¶³ã£ãœãçç±ã§åŒ·å¶çµäºãã¡ãããã§ããããæçµçºè¡šãŸãã§çŠããŸããã
Pythonã§ããŸãã¡ã¢ãªã®äœ¿ãæ¹è²ã
ããããããã§ä»åãå®éšããªããå人çã«ãŸãšããŸãããè³çããã°ã©ããŒã®ä¿ºã«ã¡ã¢ãªãæ°ã«ãããããã«ãªã£ããšããããšã¯ãã®äžãçµããã§ãã
ããããšä»åèšäºãã¡ãé·ãã§ãã
Continue Reading
Pythonã§ã®ãyieldãã説æããã«ã¯ããžã§ãã¬ãŒã¿ãã«ã€ããŠãããžã§ãã¬ãŒã¿ãã«ã€ããŠçè§£ããã«ã¯ãã€ãã¬ãŒã¿ãã«ã€ããŠçè§£ããå¿
èŠããããŸãããŸã£ãŠãŸã ãã©ãŠã¶ããã¯ããªãã§ã
ãã€ãã¬ãŒã¿ããçè§£ããã°ããžã§ãã¬ãŒã¿ãããyieldãã«ã€ããŠãããã®ã§ãé 匵ã£ãŠãããŸãããïŒïŒïŒïŒïŒïŒïŒ
ã€ãã¬ãŒã¿ãšã¯ãããŒã¿ãé çªã«åãåºãæ¹æ³ã䜿ã£ãŠãããªããžã§ã¯ããã§ããã¯ïŒ
å®ã¯Pythonã䜿ã£ãããšãã人ã®ã»ãšãã©ã¯ã€ãã¬ãŒã¿ã«ãäžè©±ã«ãªã£ãŠããŸãã
for i in range(0, 10): print(hasattr(i, "__iter__")) #False print(hasattr(range(0, 10), "__iter__")) #True
ããã®range()ã¯å®ã¯ã€ãã¬ãŒã¿ã§ããrange()ã¯ãæå®ãããç¯å²ã®æ°ãé çªã«åãåºããããšãããŠããŸããrange()ã¯ãæ¥ã«éé ã«ãªã£ããæ¥ã«2åé£ã°ãã«ãªã£ããããªãã§ããããã¡ãªã¿ã«2ã€ã®print()ã§ã¯ã第äžåŒæ°ã®ãªããžã§ã¯ããã€ãã¬ãŒã¿ãªããžã§ã¯ããã©ããã調ã¹ãŠããŸãã
ãžã§ãã¬ãŒã¿ã¯ããžã§ãã¬ãŒã¿é¢æ°ããšããžã§ãã¬ãŒã¿åŒããšãã2ã€ã®èšèã«åãããŸããå
¬åŒã§ã¯ããžã§ãã¬ãŒã¿ããšæžããŠãã£ããããžã§ãã¬ãŒã¿é¢æ°ãã®ããšã瀺ããŸãã
ãžã§ãã¬ãŒã¿ã®æå³ã端çã«èšããšããã€ãã¬ãŒã¿ãå®è£
ãã颿°ãåŒãã®ããšã§ãã
yieldãšã¯ïŒå®éšããªããïŒ
ããŠããã§ãããããyieldãã§ãããyieldã¯ãžã§ãã¬ãŒã¿ïŒé¢æ°ïŒã§äœ¿ããŸãã
ãã£ãããªã®ã§ãã£ãã§ãŠããrange()ãç°¡åã«å®è£
ããŠã¿ãŸãã
def make_range(min, max): count = min while count < max: yield count count += 1
minãçç¥ã§ãããšã第3åŒæ°ããããªã©ã®å³å¯ãªå®è£
ã¯çœ®ããšããŠãã ããã4è¡ç®ã§yieldã䜿ãããŠããŸããã§ã¯ããã®é¢æ°ãå®çŸ©ããç¶æ
ã§è²ã
ãªæ¹æ³ã§å®è¡ããŠã¿ãŸããå®éšã§ãã
1ã€ç®ïŒãã®ãŸãŸå®è¡
make_range(3, 8) #generator object make_range at 0x7eff69bf2c50
2ã€ç®ïŒnext()ã䜿ã£ãå®è¡ãã®1
f = make_range(3, 8) print(next(f)) #3 print(next(f)) #4 print(next(f)) #5 print(next(f)) #6 print(next(f)) #7
3ã€ç®ïŒnext()ã䜿ã£ãå®è¡ãã®2
print(next(make_range(3, 8))) #3 print(next(make_range(3, 8))) #3 print(next(make_range(3, 8))) #3 print(next(make_range(3, 8))) #3 print(next(make_range(3, 8))) #3
4ã€ç®ïŒrange()ã¿ããã«foræã§äœ¿ã
for i in make_range(3, 8): print(i) #3 #4 #5 #6 #7
5ã€ç®ïŒ2ã€ç®ãç¯å²å€ãŸã§å®è¡
f = make_range(3, 8) print(next(f)) #3 print(next(f)) #4 print(next(f)) #5 print(next(f)) #6 print(next(f)) #7 print(next(f)) #StopIteration
6ã€ç®ïŒnext()ãšforã®åããæ
f = make_range(3, 8) print(next(f)) #3 print(next(f)) #4 print("-----") #----- for i in f: print(i) #5 #6 #7
7ã€ç®ïŒlistãšããŠåãåºã
print(list(make_range(3, 8))) #[3, 4, 5, 6, 7]
ãªããžã§ã¯ãã1ã€è¿ã
next()ãforã§é¢æ°ãæ ŒçŽãããåããªããžã§ã¯ãã䜿ããŸãããšç¶ããã©ãã©ãåºãŠãã
ã§ãããŸã ãŸã ãããããããããããªããã§ãããä»ã¯ãšãããããããç¹åŸŽã§ãã
ããããã®yieldãšã¡ã¢ãªãäžäœã©ããªé¢ä¿ãªã®ããããã¯ãåã倿°ã䜿ããŸãããã§ãã
äžã®rangeãã©ãã®make_range颿°ã¯ãcountã䜿ããŸãããŠããŸãããããããã®ããŒã¿éãªãlistã§è¿ãããããŠãããã®ã§ããã倧éã®ããã¹ãããŒã¿ãèªãã§è§£æããŠè¿ããšãªã£ãæã«ããšãŠã圹ç«ã¡ãŸãã
ãŸããšã«ããã倿°ã䜿ããŸããã®ã§ã¡ã¢ãªã®ç¢ºä¿ãæå°éã§ãšã³ã§ããã£ãŠæãã§ããããããããŸã䜿ããã°ãã£ã¡ããšã³ãªããã°ã©ããŒã«ãªãããã§ããã
ä»åã¯ãããé·ãã§ããã»ã»ã»ã
ããããã°ããŒããŒãè²·ããŸãããããã§ã©ãºãã€ãããŸã䜿ãããïŒ
ãŸãã©ãºãã€ã«ã€ããŠæžããšã¯éããªããã§ããã©ãïŒïŒïŒïŒïŒ