Pythonã§ããŒã¿ãæ±ã£ãŠãããšãããæ¥ãµãšããã®ãã¡ã€ã«ãå šéšã¡ã¢ãªã«èªã¿èŸŒãã ãèœã¡ããããâŠïŒããšããäžå®ã«åºäŒããŸãããããªãšãã«é Œãã«ãªãã®ãã€ãã¬ãŒã¿ãšãžã§ãã¬ãŒã¿ãä»çµã¿ããã¡ããšçè§£ããŠããã°ã巚倧ãªãã°ã»CSVã»ã»ã³ãµãŒããŒã¿ã§ãæ¶Œããé¡ã§1è¡ãã€åŠçã§ããã¡ã¢ãªäžè¶³ã®ãšã©ãŒã«æ¯ãåãããããšããªããªããŸãâš
éã«èšãã°ããããææ§ã«ãããŸãŸã³ãŒããæžãç¶ãããšãç¥ããªããã¡ã«ãäžåºŠããåããªããªããžã§ã¯ãããäºåºŠã«ãŒãããŠãã°ãçãããªããŠèœãšã穎ã«ããããã¡ãããã§ãã£ããæŒãããŠãããšãææ¥ããã®Pythonã³ãŒããäžæ®µãšå®å šã§çŸãããªããŸãð
ã€ãã¬ãŒã¿ãã²ãšèšã§ãããšãé£ç¶ããŒã¿ã1ã€ãã€åãåºãããªããžã§ã¯ãã®ããšããªã¹ããéåã®ããã«è€æ°ã®å€ãæã€ããŒã¿ãããèŠçŽ ãé çªã«åŒãåºããŠãããããç¿éã³ãããã®ãããªååšã§ãã
å®ã¯ç§ãã¡ãæ®æ®µãªã«ããªãæžããŠããforæããè£åŽã§ã¯ã€ãã¬ãŒã¿ããã£ããåããŠããŸããããšãã°x = ['a', 'b', 'c']ã«å¯ŸããŠfor i in x:ãšæžãããšããPythonã¯å
éšçã«iter(x)ã§ãªã¹ãã€ãã¬ãŒã¿ãäœããnext()ãåŒã³ç¶ããŠå€ãåãåºããŠããŸããæåŸã®èŠçŽ ãåãçµãããšStopIterationãšããäŸå€ãçºçããforã«ãŒãã¯ãããçµãã£ããªããšå€æããŠåæ¢ããããšããæµãã§ãã
å³å¯ã«ã¯ã次ã®2ã€ã®ã¡ãœãããæã£ãŠãããªããžã§ã¯ããã€ãã¬ãŒã¿ãšåŒã°ããŸãã
__next__()ïŒæ¬¡ã®å€ãè¿ãã¡ãœãã__iter__()ïŒèªåèªèº«ãè¿ãã¡ãœããçµã¿èŸŒã¿ã®next()颿°ã¯å
éšã§__next__()ãåŒã³åºããŠããã ããã€ãŸããèªåã§ããã2ã€ãå®è£
ããã¯ã©ã¹ãæžãã°ãç¬èªã®ã€ãã¬ãŒã¿ãäœããããšããããã§ãã
ã巚倧ãã¡ã€ã«ã1è¡ãã€èªã¿èŸŒã¿ããããšããããŒãºã«å¯ŸããŠãPythonã¯ãšã£ãã«çããçšæããŠãããŠããŸããopen()ã§åŸããããã¡ã€ã«ãªããžã§ã¯ãèªäœãããã§ã«ã€ãã¬ãŒã¿ã«ãªã£ãŠããã®ã§ãã
f = open('text.txt')
print(next(f)) # 1è¡ç®
print(next(f)) # 2è¡ç®
print(next(f)) # 3è¡ç®
ãã®ããã«next()ãåŒã¶ãã³ã«ãã¡ã€ã«ãã1è¡ãã€åãåºãããã¡ã¢ãªã«ã¯ãããŸèªãã§ãã1è¡ãããä¹ããŸãããfor line in f:ãšæžããå Žåãæåã¯åãã§ãæåŸãŸã§èªã¿çµãããšStopIterationã§èªç¶ã«æããŸããdir(f)ã§å±æ§ã確èªãããšããã£ãã__next__ãš__iter__ã䞊ãã§ããã®ãç®èŠã§ããŸãð
ç¬èªã®ã€ãã¬ãŒã¿ãã¯ã©ã¹ã§æžãã®ã¯ãæ£çŽã¡ãã£ãšé¢åã§ããããã§é¢¯çœãšç»å Žããã®ããžã§ãã¬ãŒã¿ãreturnã®ãããã«yieldã䜿ã£ã颿°ãæžãã ãã§ãã€ãã¬ãŒã¿ãšåãæ¯ãèãããããªããžã§ã¯ãïŒãžã§ãã¬ãŒã¿ãªããžã§ã¯ãïŒãæã«å
¥ããŸãð
ããšãã°ããããªé¢æ°ãèããŠã¿ãŸãã
def my_gen():
  x = 10
  yield x # 1åç®ã¯ããã§äžæåæ¢ããŠ10ãè¿ã
  x += 10
  yield x # 2åç®ã¯20ãè¿ã
  x += 10
  yield x # 3åç®ã¯30ãè¿ã
g = my_gen()ãåŒã³åºããŠããã®æç¹ã§ã¯é¢æ°ã®äžèº«ã¯åããŸãããè¿ã£ãŠããã®ã¯ãžã§ãã¬ãŒã¿ãªããžã§ã¯ããnext(g)ãåŒãã ç¬éã«åŠçãèµ°ããyieldã®ãšããã§äžæåæ¢ããŠå€ãè¿ããŸããå床next(g)ãåŒã¶ãšã忢ãããšããããåŠçãåéããæ¬¡ã®yieldãŸã§é²ãââãã®ãéäžã§æ¢ãŸã£ãŠããŸãåéã§ãããæ§è³ªããžã§ãã¬ãŒã¿ã®ç骚é ã§ãã
ãã¹ãŠã®yieldãæ¶è²»ããããšã«ããäžåºŠnext()ãåŒã¶ãšããã¡ããStopIterationãæããŠçµäºããŸããforæãšçµã¿åãããã°ãèªåã®ã¯ã©ã¹ãæžããã«ãç¡éçŽæ°ãã巚倧ãã¡ã€ã«ã®è¡èªã¿ããããŒã¿ã®é
å»¶çæããªã©ãããŸããŸãªåŠçã衚çŸã§ããŸãð¡
ã€ãã¬ãŒã¿ãšãžã§ãã¬ãŒã¿ã«ã¯ãèŠèœãšããã¡ãªéèŠãªæ§è³ªããããŸããããã¯ãäžåºŠåãåºããå€ã¯ããåãåºããªãããšããããšããªã¹ããéåã¯äœåºŠã§ãforã§åããŸãããã€ãã¬ãŒã¿ïŒãžã§ãã¬ãŒã¿ã¯æ¶è²»ããã£ãç¬éã«ç©ºã£ãœã«ãªããŸãã
ããšãã°æšæºã©ã€ãã©ãªã®pathlib.Path.iterdir()ã¯ãžã§ãã¬ãŒã¿ãªããžã§ã¯ããè¿ããŸãããããããªã¹ãã¿ãããªãã®ããšããŠ2åã«ãŒããããšã2åç®ã¯äœãåºãŠããããã°ã®æž©åºã«ãªããŸããåé¿çã¯ã·ã³ãã«ã§ãå¿
èŠã«å¿ããŠlist(...)ã§ãªã¹ãã«å€æããŠããç¹°ãè¿ã䜿ãããšãããžã§ãã¬ãŒã¿ãªããžã§ã¯ãïŒãªã¹ããšã¯å¥ç©ããšæèããŠããã ãã§ãäžå¯è§£ãªãã°ã倧å¹
ã«æžãããŸãð¡
ã€ãã¬ãŒã¿ããžã§ãã¬ãŒã¿ã®ãããªäžçŽãããã¯ã¯ãåç»ïŒæžç±ïŒæãåããç°å¢ã®äžæ¬æ±ã§åŠã¶ãšäžæ°ã«å®çããŸããããã§ã¯åŠç¿ã®è³ªãåºäžãããŠãããã¢ã€ãã ãå³éžããŸããã
èšèªä»æ§ã®ããªãïŒãããã¡ããšæŒãããã人ã«ãŽã£ããã®äžåãã€ãã¬ãŒã¿ãããã³ã«ãyieldã®æåããå³è§£ãšå
·äœäŸã§ãã£ãã远ããããããŸãã
å®éã®æ¥åã§ãããã£ãŠãžã§ãã¬ãŒã¿ã§æžãã°ã¹ããŒãã ã£ãã®ãïŒããšæ°ã¥ãããŠããããã¿ãŒã³éãèªããã³ã«èªåã®ã³ãŒããæŽç·ŽãããŠãããŸãã
倧éããŒã¿ã®åŠçïŒãžã§ãã¬ãŒã¿ã®æ¬é çºæ®ãã€ã³ããpandasãNumPyãšã®é£æºãå«ããŠãå¹çã®è¯ãããŒã¿æäœãäœç³»çã«åŠã¹ãŸãã
å·Šã«ãšãã£ã¿ãå³ã«å¯Ÿè©±ã¢ãŒããããã¥ã¡ã³ãã䞊ã¹ãŠãããã ãã§ãåŠç¿å¹çã¯äœæã§2åã«ããžã§ãã¬ãŒã¿ã®æåãå®éšããªããåŠã¶çšéãšãçžæ§æçŸ€ã§ãã
æãåãããŠãã身ã«ã€ãã®ãããã°ã©ãã³ã°ãæéµæã®è¯ãããŒããŒãã«å€ããã ãã§ãåçµãæ€èšŒã³ãŒããæžãããŒãã«ããã£ãšäžãããŸãã
ãã€ãã©ãã«ïŒiterableïŒãã¯__iter__()ãæã€ãç¹°ãè¿ãããªããžã§ã¯ããã®ããšããªã¹ããéåãæååãªã©ã該åœããŸããäžæ¹ãã€ãã¬ãŒã¿ïŒiteratorïŒãã¯ãããã«å ããŠ__next__()ãæã¡ãå®éã«1ã€ãã€å€ãåãåºãåŽã§ãããªã¹ãã¯ã€ãã©ãã«ã§ãããã€ãã¬ãŒã¿ãã®ãã®ã§ã¯ãããŸããã
yieldãšreturnã¯ã©ãéããã§ããïŒreturnã¯é¢æ°ãçµäºããŠå€ãè¿ããŸãããyieldã¯åŠçãããã£ããæ¢ããŠãå€ãè¿ããŸããæ¬¡ã«next()ãåŒã°ãããšãæ¢ãŸã£ãå ŽæããåŠçãåéããŸããéäžã®ç¶æ
ãèŠããŠããããããããžã§ãã¬ãŒã¿ã®äžçªã®ãã€ã³ãã§ãã
ãã£ããèšãã°ãå šéšãã¡ã¢ãªã«ä¹ããããªããšãããç¡éã«ç¶ãå¯èœæ§ã®ããåŠçãæ±ããšãããããŒã¿ã1ã€ãã€äœã£ãŠã¯æ¶è²»ããåŠçãæžããšãããåºçªã§ãã巚倧ãã¡ã€ã«ã®è¡èªã¿ãã¹ããªãŒãã³ã°åŠçãç¡éã«ãŠã³ã¿ãªã©ãå žåäŸã§ãã
ã¯ããlist(generator)ãšæžãã ãã§ãªã¹ãã«å€æã§ããŸãããã ãããã®ç¬éã«ãã¹ãŠã®å€ãã¡ã¢ãªã«å±éããããããããŒã¿éãèšå€§ãªå Žåã¯ã¡ã¢ãªäœ¿çšéã«æ³šæãå¿
èŠã§ããäœåºŠãã«ãŒãããããšãã ããªã¹ãåããããšèŠããŠãããšãã©ã³ã¹ãåããŸãã
å
¬åŒããã¥ã¡ã³ãã®æ»ãå€ã®åæ¬ã確èªããã®ãäžçªç¢ºå®ã§ããã³ãŒãäžã§çŽ æ©ã調ã¹ããå Žåã¯type(obj)ãhasattr(obj, '__next__')ã䜿ããšããã®å Žã§å€å¥ã§ããŸããå®åã§ã¯ãåããŠäœ¿ã颿°ã®æ»ãå€åã¯å¿
ã確èªããããç¿æ
£åããŠãããšãå°é·ãèžã¿ã«ãããªããŸãã
ã€ãã¬ãŒã¿ã¯ã1ã€ãã€å€ãåãåºãããªããžã§ã¯ããããžã§ãã¬ãŒã¿ã¯ãyieldã§ãããç°¡åã«äœãã颿°ãããã®2ã€ãæŒãããã ãã§ã巚倧ããŒã¿ã®åŠçãç¡éã®æ°åãã·ã³ãã«ã«æžããããã«ãªããŸããããã«ãäžåºŠããããåããªãããšããæ§è³ªã«æ³šæããã°ãå°é·ã®å€ãã¯èªç¶ã«é¿ããããŸãð¡
仿¥ã®çè§£ã¯ãææ¥ã®ããªãããã¡ã¢ãªãšã©ãŒã«æ¯ããªããšã³ãžãã¢ããžãšäžæ®µéæŒãäžããŠãããŸããè¯è³ªãªæžç±ãšå¿«é©ãªäœæ¥ç°å¢ã峿¹ã«ã€ããŠããã²æãåãããªãã身äœã«æã¿èŸŒãŸããŠãããŸãããð
ð ãåãã³ãŒãããããèœã¡ãª…
ð Pythonã®ãå¶åŸ¡æ§æã…
ð ãæååãèªåšã«æãã人ã…
ð ãèªã¿ãããã³ãŒããã¯å€æ°…
ð ããã°ã©ãã³ã°ã®ãã¹ãŠã¯ã…
ð ãæååã«å€æ°ãå ¥ãããã…