[{"data":1,"prerenderedAt":2083},["ShallowReactive",2],{"doc-\u002Flearn\u002Fgenerators-in-python-explained":3},{"id":4,"title":5,"body":6,"description":2076,"extension":2077,"meta":2078,"navigation":138,"path":2079,"seo":2080,"stem":2081,"__hash__":2082},"content\u002Flearn\u002Fgenerators-in-python-explained.md","Generators in Python Explained",{"type":7,"value":8,"toc":2050},"minimark",[9,13,17,20,33,41,46,177,180,200,206,210,213,216,219,230,244,251,256,259,269,281,284,417,419,444,447,466,469,473,478,483,488,553,555,577,581,638,641,672,675,678,736,738,754,758,764,846,848,875,882,997,999,1015,1024,1075,1085,1089,1092,1096,1168,1170,1198,1202,1283,1285,1308,1311,1314,1321,1325,1328,1331,1345,1347,1435,1437,1462,1465,1479,1483,1486,1489,1509,1512,1612,1614,1639,1642,1694,1696,1722,1725,1729,1732,1759,1762,1891,1893,1949,1952,1966,1974,1978,1982,1985,1992,1998,2002,2005,2009,2015,2019,2046],[10,11,5],"h1",{"id":12},"generators-in-python-explained",[14,15,16],"p",{},"Generators let you produce values one at a time instead of building a full list all at once.",[14,18,19],{},"This is useful when:",[21,22,23,27,30],"ul",{},[24,25,26],"li",{},"you have many values",[24,28,29],{},"you only need to loop through them once",[24,31,32],{},"you want to create values only when needed",[14,34,35,36,40],{},"A Python function becomes a generator function when it uses ",[37,38,39],"code",{},"yield",".",[42,43,45],"h2",{"id":44},"quick-example","Quick example",[47,48,53],"pre",{"className":49,"code":50,"language":51,"meta":52,"style":52},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","def count_up_to(limit):\n    number = 1\n    while number \u003C= limit:\n        yield number\n        number += 1\n\nfor value in count_up_to(3):\n    print(value)\n","python","",[37,54,55,79,94,113,122,133,140,162],{"__ignoreMap":52},[56,57,60,64,68,72,76],"span",{"class":58,"line":59},"line",1,[56,61,63],{"class":62},"sbsja","def",[56,65,67],{"class":66},"sGLFI"," count_up_to",[56,69,71],{"class":70},"sP7_E","(",[56,73,75],{"class":74},"sFwrP","limit",[56,77,78],{"class":70},"):\n",[56,80,82,86,90],{"class":58,"line":81},2,[56,83,85],{"class":84},"su5hD","    number ",[56,87,89],{"class":88},"smGrS","=",[56,91,93],{"class":92},"srdBf"," 1\n",[56,95,97,101,104,107,110],{"class":58,"line":96},3,[56,98,100],{"class":99},"sVHd0","    while",[56,102,103],{"class":84}," number ",[56,105,106],{"class":88},"\u003C=",[56,108,109],{"class":84}," limit",[56,111,112],{"class":70},":\n",[56,114,116,119],{"class":58,"line":115},4,[56,117,118],{"class":99},"        yield",[56,120,121],{"class":84}," number\n",[56,123,125,128,131],{"class":58,"line":124},5,[56,126,127],{"class":84},"        number ",[56,129,130],{"class":88},"+=",[56,132,93],{"class":92},[56,134,136],{"class":58,"line":135},6,[56,137,139],{"emptyLinePlaceholder":138},true,"\n",[56,141,143,146,149,152,155,157,160],{"class":58,"line":142},7,[56,144,145],{"class":99},"for",[56,147,148],{"class":84}," value ",[56,150,151],{"class":99},"in",[56,153,67],{"class":154},"slqww",[56,156,71],{"class":70},[56,158,159],{"class":92},"3",[56,161,78],{"class":70},[56,163,165,169,171,174],{"class":58,"line":164},8,[56,166,168],{"class":167},"sptTA","    print",[56,170,71],{"class":70},[56,172,173],{"class":154},"value",[56,175,176],{"class":70},")\n",[14,178,179],{},"Output:",[47,181,183],{"className":49,"code":182,"language":51,"meta":52,"style":52},"1\n2\n3\n",[37,184,185,190,195],{"__ignoreMap":52},[56,186,187],{"class":58,"line":59},[56,188,189],{"class":92},"1\n",[56,191,192],{"class":58,"line":81},[56,193,194],{"class":92},"2\n",[56,196,197],{"class":58,"line":96},[56,198,199],{"class":92},"3\n",[14,201,202,203,205],{},"Use ",[37,204,39],{}," inside a function to create a generator. The values are produced one at a time when you loop over it.",[42,207,209],{"id":208},"what-a-generator-is","What a generator is",[14,211,212],{},"A generator is an object that gives values one at a time.",[14,214,215],{},"Unlike a list, it does not create and store all results in memory immediately. Instead, it waits until Python asks for the next value.",[14,217,218],{},"Generators are helpful when:",[21,220,221,224,227],{},[24,222,223],{},"you are working with lots of data",[24,225,226],{},"values should be created as needed",[24,228,229],{},"you only need to loop through the results once",[14,231,232,233,238,239,243],{},"If you are new to this topic, it also helps to understand the idea of an ",[234,235,237],"a",{"href":236},"\u002Fglossary\u002Fwhat-is-an-iterable-in-python","iterable in Python"," and an ",[234,240,242],{"href":241},"\u002Fglossary\u002Fwhat-is-an-iterator-in-python","iterator in Python",", because generators are closely related to both.",[42,245,247,248,250],{"id":246},"how-yield-works","How ",[37,249,39],{}," works",[14,252,253,255],{},[37,254,39],{}," sends back one value and pauses the function.",[14,257,258],{},"When Python asks for the next value, the function continues from where it stopped.",[14,260,261,262,264,265,268],{},"That is the main difference between ",[37,263,39],{}," and ",[37,266,267],{},"return",":",[21,270,271,276],{},[24,272,273,275],{},[37,274,267],{}," ends the function completely",[24,277,278,280],{},[37,279,39],{}," pauses the function and allows it to continue later",[14,282,283],{},"Example:",[47,285,287],{"className":49,"code":286,"language":51,"meta":52,"style":52},"def simple_generator():\n    print(\"Start\")\n    yield 10\n    print(\"Middle\")\n    yield 20\n    print(\"End\")\n\ngen = simple_generator()\n\nprint(next(gen))\nprint(next(gen))\n",[37,288,289,299,317,325,340,347,362,366,378,383,402],{"__ignoreMap":52},[56,290,291,293,296],{"class":58,"line":59},[56,292,63],{"class":62},[56,294,295],{"class":66}," simple_generator",[56,297,298],{"class":70},"():\n",[56,300,301,303,305,309,313,315],{"class":58,"line":81},[56,302,168],{"class":167},[56,304,71],{"class":70},[56,306,308],{"class":307},"sjJ54","\"",[56,310,312],{"class":311},"s_sjI","Start",[56,314,308],{"class":307},[56,316,176],{"class":70},[56,318,319,322],{"class":58,"line":96},[56,320,321],{"class":99},"    yield",[56,323,324],{"class":92}," 10\n",[56,326,327,329,331,333,336,338],{"class":58,"line":115},[56,328,168],{"class":167},[56,330,71],{"class":70},[56,332,308],{"class":307},[56,334,335],{"class":311},"Middle",[56,337,308],{"class":307},[56,339,176],{"class":70},[56,341,342,344],{"class":58,"line":124},[56,343,321],{"class":99},[56,345,346],{"class":92}," 20\n",[56,348,349,351,353,355,358,360],{"class":58,"line":135},[56,350,168],{"class":167},[56,352,71],{"class":70},[56,354,308],{"class":307},[56,356,357],{"class":311},"End",[56,359,308],{"class":307},[56,361,176],{"class":70},[56,363,364],{"class":58,"line":142},[56,365,139],{"emptyLinePlaceholder":138},[56,367,368,371,373,375],{"class":58,"line":164},[56,369,370],{"class":84},"gen ",[56,372,89],{"class":88},[56,374,295],{"class":154},[56,376,377],{"class":70},"()\n",[56,379,381],{"class":58,"line":380},9,[56,382,139],{"emptyLinePlaceholder":138},[56,384,386,389,391,394,396,399],{"class":58,"line":385},10,[56,387,388],{"class":167},"print",[56,390,71],{"class":70},[56,392,393],{"class":167},"next",[56,395,71],{"class":70},[56,397,398],{"class":154},"gen",[56,400,401],{"class":70},"))\n",[56,403,405,407,409,411,413,415],{"class":58,"line":404},11,[56,406,388],{"class":167},[56,408,71],{"class":70},[56,410,393],{"class":167},[56,412,71],{"class":70},[56,414,398],{"class":154},[56,416,401],{"class":70},[14,418,179],{},[47,420,422],{"className":49,"code":421,"language":51,"meta":52,"style":52},"Start\n10\nMiddle\n20\n",[37,423,424,429,434,439],{"__ignoreMap":52},[56,425,426],{"class":58,"line":59},[56,427,428],{"class":84},"Start\n",[56,430,431],{"class":58,"line":81},[56,432,433],{"class":92},"10\n",[56,435,436],{"class":58,"line":96},[56,437,438],{"class":84},"Middle\n",[56,440,441],{"class":58,"line":115},[56,442,443],{"class":92},"20\n",[14,445,446],{},"Notice what happens:",[21,448,449,452,457,460],{},[24,450,451],{},"the function does not run all at once",[24,453,454,455],{},"it runs until the first ",[37,456,39],{},[24,458,459],{},"then it pauses",[24,461,462,465],{},[37,463,464],{},"next(gen)"," starts it again from the same place",[14,467,468],{},"After all values are yielded, the generator is exhausted.",[42,470,472],{"id":471},"generator-function-vs-normal-function","Generator function vs normal function",[14,474,475,476,40],{},"A normal function gives one final result with ",[37,477,267],{},[14,479,480,481,40],{},"A generator function can give many results over time with ",[37,482,39],{},[484,485,487],"h3",{"id":486},"normal-function","Normal function",[47,489,491],{"className":49,"code":490,"language":51,"meta":52,"style":52},"def get_numbers():\n    return [1, 2, 3]\n\nresult = get_numbers()\nprint(result)\n",[37,492,493,502,527,531,542],{"__ignoreMap":52},[56,494,495,497,500],{"class":58,"line":59},[56,496,63],{"class":62},[56,498,499],{"class":66}," get_numbers",[56,501,298],{"class":70},[56,503,504,507,510,513,516,519,521,524],{"class":58,"line":81},[56,505,506],{"class":99},"    return",[56,508,509],{"class":70}," [",[56,511,512],{"class":92},"1",[56,514,515],{"class":70},",",[56,517,518],{"class":92}," 2",[56,520,515],{"class":70},[56,522,523],{"class":92}," 3",[56,525,526],{"class":70},"]\n",[56,528,529],{"class":58,"line":96},[56,530,139],{"emptyLinePlaceholder":138},[56,532,533,536,538,540],{"class":58,"line":115},[56,534,535],{"class":84},"result ",[56,537,89],{"class":88},[56,539,499],{"class":154},[56,541,377],{"class":70},[56,543,544,546,548,551],{"class":58,"line":124},[56,545,388],{"class":167},[56,547,71],{"class":70},[56,549,550],{"class":154},"result",[56,552,176],{"class":70},[14,554,179],{},[47,556,558],{"className":49,"code":557,"language":51,"meta":52,"style":52},"[1, 2, 3]\n",[37,559,560],{"__ignoreMap":52},[56,561,562,565,567,569,571,573,575],{"class":58,"line":59},[56,563,564],{"class":70},"[",[56,566,512],{"class":92},[56,568,515],{"class":70},[56,570,518],{"class":92},[56,572,515],{"class":70},[56,574,523],{"class":92},[56,576,526],{"class":70},[484,578,580],{"id":579},"generator-function","Generator function",[47,582,584],{"className":49,"code":583,"language":51,"meta":52,"style":52},"def get_numbers():\n    yield 1\n    yield 2\n    yield 3\n\nresult = get_numbers()\nprint(result)\n",[37,585,586,594,600,607,614,618,628],{"__ignoreMap":52},[56,587,588,590,592],{"class":58,"line":59},[56,589,63],{"class":62},[56,591,499],{"class":66},[56,593,298],{"class":70},[56,595,596,598],{"class":58,"line":81},[56,597,321],{"class":99},[56,599,93],{"class":92},[56,601,602,604],{"class":58,"line":96},[56,603,321],{"class":99},[56,605,606],{"class":92}," 2\n",[56,608,609,611],{"class":58,"line":115},[56,610,321],{"class":99},[56,612,613],{"class":92}," 3\n",[56,615,616],{"class":58,"line":124},[56,617,139],{"emptyLinePlaceholder":138},[56,619,620,622,624,626],{"class":58,"line":135},[56,621,535],{"class":84},[56,623,89],{"class":88},[56,625,499],{"class":154},[56,627,377],{"class":70},[56,629,630,632,634,636],{"class":58,"line":142},[56,631,388],{"class":167},[56,633,71],{"class":70},[56,635,550],{"class":154},[56,637,176],{"class":70},[14,639,640],{},"Possible output:",[47,642,644],{"className":49,"code":643,"language":51,"meta":52,"style":52},"\u003Cgenerator object get_numbers at 0x...>\n",[37,645,646],{"__ignoreMap":52},[56,647,648,651,654,658,661,665,669],{"class":58,"line":59},[56,649,650],{"class":88},"\u003C",[56,652,653],{"class":84},"generator ",[56,655,657],{"class":656},"sZMiF","object",[56,659,660],{"class":84}," get_numbers at ",[56,662,664],{"class":663},"srjyR","0x",[56,666,668],{"class":667},"s_hVV","...",[56,670,671],{"class":88},">\n",[14,673,674],{},"Calling a generator function does not run all its code immediately. It returns a generator object.",[14,676,677],{},"You can then loop over it:",[47,679,681],{"className":49,"code":680,"language":51,"meta":52,"style":52},"def get_numbers():\n    yield 1\n    yield 2\n    yield 3\n\nfor number in get_numbers():\n    print(number)\n",[37,682,683,691,697,703,709,713,725],{"__ignoreMap":52},[56,684,685,687,689],{"class":58,"line":59},[56,686,63],{"class":62},[56,688,499],{"class":66},[56,690,298],{"class":70},[56,692,693,695],{"class":58,"line":81},[56,694,321],{"class":99},[56,696,93],{"class":92},[56,698,699,701],{"class":58,"line":96},[56,700,321],{"class":99},[56,702,606],{"class":92},[56,704,705,707],{"class":58,"line":115},[56,706,321],{"class":99},[56,708,613],{"class":92},[56,710,711],{"class":58,"line":124},[56,712,139],{"emptyLinePlaceholder":138},[56,714,715,717,719,721,723],{"class":58,"line":135},[56,716,145],{"class":99},[56,718,103],{"class":84},[56,720,151],{"class":99},[56,722,499],{"class":154},[56,724,298],{"class":70},[56,726,727,729,731,734],{"class":58,"line":142},[56,728,168],{"class":167},[56,730,71],{"class":70},[56,732,733],{"class":154},"number",[56,735,176],{"class":70},[14,737,179],{},[47,739,740],{"className":49,"code":182,"language":51,"meta":52,"style":52},[37,741,742,746,750],{"__ignoreMap":52},[56,743,744],{"class":58,"line":59},[56,745,189],{"class":92},[56,747,748],{"class":58,"line":81},[56,749,194],{"class":92},[56,751,752],{"class":58,"line":96},[56,753,199],{"class":92},[42,755,757],{"id":756},"looping-through-a-generator","Looping through a generator",[14,759,760,761,763],{},"The easiest way to use a generator is with a ",[37,762,145],{}," loop.",[47,765,767],{"className":49,"code":766,"language":51,"meta":52,"style":52},"def count_up_to(limit):\n    number = 1\n    while number \u003C= limit:\n        yield number\n        number += 1\n\nfor value in count_up_to(5):\n    print(value)\n",[37,768,769,781,789,801,807,815,819,836],{"__ignoreMap":52},[56,770,771,773,775,777,779],{"class":58,"line":59},[56,772,63],{"class":62},[56,774,67],{"class":66},[56,776,71],{"class":70},[56,778,75],{"class":74},[56,780,78],{"class":70},[56,782,783,785,787],{"class":58,"line":81},[56,784,85],{"class":84},[56,786,89],{"class":88},[56,788,93],{"class":92},[56,790,791,793,795,797,799],{"class":58,"line":96},[56,792,100],{"class":99},[56,794,103],{"class":84},[56,796,106],{"class":88},[56,798,109],{"class":84},[56,800,112],{"class":70},[56,802,803,805],{"class":58,"line":115},[56,804,118],{"class":99},[56,806,121],{"class":84},[56,808,809,811,813],{"class":58,"line":124},[56,810,127],{"class":84},[56,812,130],{"class":88},[56,814,93],{"class":92},[56,816,817],{"class":58,"line":135},[56,818,139],{"emptyLinePlaceholder":138},[56,820,821,823,825,827,829,831,834],{"class":58,"line":142},[56,822,145],{"class":99},[56,824,148],{"class":84},[56,826,151],{"class":99},[56,828,67],{"class":154},[56,830,71],{"class":70},[56,832,833],{"class":92},"5",[56,835,78],{"class":70},[56,837,838,840,842,844],{"class":58,"line":164},[56,839,168],{"class":167},[56,841,71],{"class":70},[56,843,173],{"class":154},[56,845,176],{"class":70},[14,847,179],{},[47,849,851],{"className":49,"code":850,"language":51,"meta":52,"style":52},"1\n2\n3\n4\n5\n",[37,852,853,857,861,865,870],{"__ignoreMap":52},[56,854,855],{"class":58,"line":59},[56,856,189],{"class":92},[56,858,859],{"class":58,"line":81},[56,860,194],{"class":92},[56,862,863],{"class":58,"line":96},[56,864,199],{"class":92},[56,866,867],{"class":58,"line":115},[56,868,869],{"class":92},"4\n",[56,871,872],{"class":58,"line":124},[56,873,874],{"class":92},"5\n",[14,876,877,878,881],{},"You can also use ",[37,879,880],{},"next()"," to get one value at a time:",[47,883,885],{"className":49,"code":884,"language":51,"meta":52,"style":52},"def count_up_to(limit):\n    number = 1\n    while number \u003C= limit:\n        yield number\n        number += 1\n\ngen = count_up_to(3)\n\nprint(next(gen))\nprint(next(gen))\nprint(next(gen))\n",[37,886,887,899,907,919,925,933,937,951,955,969,983],{"__ignoreMap":52},[56,888,889,891,893,895,897],{"class":58,"line":59},[56,890,63],{"class":62},[56,892,67],{"class":66},[56,894,71],{"class":70},[56,896,75],{"class":74},[56,898,78],{"class":70},[56,900,901,903,905],{"class":58,"line":81},[56,902,85],{"class":84},[56,904,89],{"class":88},[56,906,93],{"class":92},[56,908,909,911,913,915,917],{"class":58,"line":96},[56,910,100],{"class":99},[56,912,103],{"class":84},[56,914,106],{"class":88},[56,916,109],{"class":84},[56,918,112],{"class":70},[56,920,921,923],{"class":58,"line":115},[56,922,118],{"class":99},[56,924,121],{"class":84},[56,926,927,929,931],{"class":58,"line":124},[56,928,127],{"class":84},[56,930,130],{"class":88},[56,932,93],{"class":92},[56,934,935],{"class":58,"line":135},[56,936,139],{"emptyLinePlaceholder":138},[56,938,939,941,943,945,947,949],{"class":58,"line":142},[56,940,370],{"class":84},[56,942,89],{"class":88},[56,944,67],{"class":154},[56,946,71],{"class":70},[56,948,159],{"class":92},[56,950,176],{"class":70},[56,952,953],{"class":58,"line":164},[56,954,139],{"emptyLinePlaceholder":138},[56,956,957,959,961,963,965,967],{"class":58,"line":380},[56,958,388],{"class":167},[56,960,71],{"class":70},[56,962,393],{"class":167},[56,964,71],{"class":70},[56,966,398],{"class":154},[56,968,401],{"class":70},[56,970,971,973,975,977,979,981],{"class":58,"line":385},[56,972,388],{"class":167},[56,974,71],{"class":70},[56,976,393],{"class":167},[56,978,71],{"class":70},[56,980,398],{"class":154},[56,982,401],{"class":70},[56,984,985,987,989,991,993,995],{"class":58,"line":404},[56,986,388],{"class":167},[56,988,71],{"class":70},[56,990,393],{"class":167},[56,992,71],{"class":70},[56,994,398],{"class":154},[56,996,401],{"class":70},[14,998,179],{},[47,1000,1001],{"className":49,"code":182,"language":51,"meta":52,"style":52},[37,1002,1003,1007,1011],{"__ignoreMap":52},[56,1004,1005],{"class":58,"line":59},[56,1006,189],{"class":92},[56,1008,1009],{"class":58,"line":81},[56,1010,194],{"class":92},[56,1012,1013],{"class":58,"line":96},[56,1014,199],{"class":92},[14,1016,1017,1018,1020,1021,40],{},"If you call ",[37,1019,880],{}," again after the generator is finished, Python raises ",[37,1022,1023],{},"StopIteration",[47,1025,1027],{"className":49,"code":1026,"language":51,"meta":52,"style":52},"gen = count_up_to(1)\n\nprint(next(gen))\nprint(next(gen))\n",[37,1028,1029,1043,1047,1061],{"__ignoreMap":52},[56,1030,1031,1033,1035,1037,1039,1041],{"class":58,"line":59},[56,1032,370],{"class":84},[56,1034,89],{"class":88},[56,1036,67],{"class":154},[56,1038,71],{"class":70},[56,1040,512],{"class":92},[56,1042,176],{"class":70},[56,1044,1045],{"class":58,"line":81},[56,1046,139],{"emptyLinePlaceholder":138},[56,1048,1049,1051,1053,1055,1057,1059],{"class":58,"line":96},[56,1050,388],{"class":167},[56,1052,71],{"class":70},[56,1054,393],{"class":167},[56,1056,71],{"class":70},[56,1058,398],{"class":154},[56,1060,401],{"class":70},[56,1062,1063,1065,1067,1069,1071,1073],{"class":58,"line":115},[56,1064,388],{"class":167},[56,1066,71],{"class":70},[56,1068,393],{"class":167},[56,1070,71],{"class":70},[56,1072,398],{"class":154},[56,1074,401],{"class":70},[14,1076,1077,1078,1080,1081,40],{},"For beginners, a ",[37,1079,145],{}," loop is usually the best choice because it stops automatically when the generator is done. If you want to understand this error better, see ",[234,1082,1084],{"href":1083},"\u002Ferrors\u002Fstopiteration-exception-in-python-explained","StopIteration in Python explained",[42,1086,1088],{"id":1087},"generator-expressions","Generator expressions",[14,1090,1091],{},"A generator expression is similar to a list comprehension, but it uses round brackets instead of square brackets.",[484,1093,1095],{"id":1094},"list-comprehension","List comprehension",[47,1097,1099],{"className":49,"code":1098,"language":51,"meta":52,"style":52},"numbers = [1, 2, 3, 4]\ndoubled = [x * 2 for x in numbers]\nprint(doubled)\n",[37,1100,1101,1127,1157],{"__ignoreMap":52},[56,1102,1103,1106,1108,1110,1112,1114,1116,1118,1120,1122,1125],{"class":58,"line":59},[56,1104,1105],{"class":84},"numbers ",[56,1107,89],{"class":88},[56,1109,509],{"class":70},[56,1111,512],{"class":92},[56,1113,515],{"class":70},[56,1115,518],{"class":92},[56,1117,515],{"class":70},[56,1119,523],{"class":92},[56,1121,515],{"class":70},[56,1123,1124],{"class":92}," 4",[56,1126,526],{"class":70},[56,1128,1129,1132,1134,1136,1139,1142,1144,1147,1150,1152,1155],{"class":58,"line":81},[56,1130,1131],{"class":84},"doubled ",[56,1133,89],{"class":88},[56,1135,509],{"class":70},[56,1137,1138],{"class":84},"x ",[56,1140,1141],{"class":88},"*",[56,1143,518],{"class":92},[56,1145,1146],{"class":99}," for",[56,1148,1149],{"class":84}," x ",[56,1151,151],{"class":99},[56,1153,1154],{"class":84}," numbers",[56,1156,526],{"class":70},[56,1158,1159,1161,1163,1166],{"class":58,"line":96},[56,1160,388],{"class":167},[56,1162,71],{"class":70},[56,1164,1165],{"class":154},"doubled",[56,1167,176],{"class":70},[14,1169,179],{},[47,1171,1173],{"className":49,"code":1172,"language":51,"meta":52,"style":52},"[2, 4, 6, 8]\n",[37,1174,1175],{"__ignoreMap":52},[56,1176,1177,1179,1182,1184,1186,1188,1191,1193,1196],{"class":58,"line":59},[56,1178,564],{"class":70},[56,1180,1181],{"class":92},"2",[56,1183,515],{"class":70},[56,1185,1124],{"class":92},[56,1187,515],{"class":70},[56,1189,1190],{"class":92}," 6",[56,1192,515],{"class":70},[56,1194,1195],{"class":92}," 8",[56,1197,526],{"class":70},[484,1199,1201],{"id":1200},"generator-expression","Generator expression",[47,1203,1205],{"className":49,"code":1204,"language":51,"meta":52,"style":52},"numbers = [1, 2, 3, 4]\ndoubled = (x * 2 for x in numbers)\n\nfor value in doubled:\n    print(value)\n",[37,1206,1207,1231,1256,1260,1273],{"__ignoreMap":52},[56,1208,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229],{"class":58,"line":59},[56,1210,1105],{"class":84},[56,1212,89],{"class":88},[56,1214,509],{"class":70},[56,1216,512],{"class":92},[56,1218,515],{"class":70},[56,1220,518],{"class":92},[56,1222,515],{"class":70},[56,1224,523],{"class":92},[56,1226,515],{"class":70},[56,1228,1124],{"class":92},[56,1230,526],{"class":70},[56,1232,1233,1235,1237,1240,1242,1244,1246,1248,1250,1252,1254],{"class":58,"line":81},[56,1234,1131],{"class":84},[56,1236,89],{"class":88},[56,1238,1239],{"class":70}," (",[56,1241,1138],{"class":84},[56,1243,1141],{"class":88},[56,1245,518],{"class":92},[56,1247,1146],{"class":99},[56,1249,1149],{"class":84},[56,1251,151],{"class":99},[56,1253,1154],{"class":84},[56,1255,176],{"class":70},[56,1257,1258],{"class":58,"line":96},[56,1259,139],{"emptyLinePlaceholder":138},[56,1261,1262,1264,1266,1268,1271],{"class":58,"line":115},[56,1263,145],{"class":99},[56,1265,148],{"class":84},[56,1267,151],{"class":99},[56,1269,1270],{"class":84}," doubled",[56,1272,112],{"class":70},[56,1274,1275,1277,1279,1281],{"class":58,"line":124},[56,1276,168],{"class":167},[56,1278,71],{"class":70},[56,1280,173],{"class":154},[56,1282,176],{"class":70},[14,1284,179],{},[47,1286,1288],{"className":49,"code":1287,"language":51,"meta":52,"style":52},"2\n4\n6\n8\n",[37,1289,1290,1294,1298,1303],{"__ignoreMap":52},[56,1291,1292],{"class":58,"line":59},[56,1293,194],{"class":92},[56,1295,1296],{"class":58,"line":81},[56,1297,869],{"class":92},[56,1299,1300],{"class":58,"line":96},[56,1301,1302],{"class":92},"6\n",[56,1304,1305],{"class":58,"line":115},[56,1306,1307],{"class":92},"8\n",[14,1309,1310],{},"A generator expression creates values lazily. That means the values are produced when needed, not all at once.",[14,1312,1313],{},"Use this when you only need to loop through the results.",[14,1315,1316,1317,40],{},"If you want to compare this more directly with list creation, see ",[234,1318,1320],{"href":1319},"\u002Flearn\u002Flist-comprehensions-in-python-explained","list comprehensions in Python explained",[42,1322,1324],{"id":1323},"when-to-use-generators","When to use generators",[14,1326,1327],{},"Generators are a good choice when you want to process data step by step.",[14,1329,1330],{},"Use generators when:",[21,1332,1333,1336,1339,1342],{},[24,1334,1335],{},"you are working with large amounts of data",[24,1337,1338],{},"you only need each value once",[24,1340,1341],{},"you want to avoid storing everything at the same time",[24,1343,1344],{},"you are reading data gradually, such as lines from a file",[14,1346,283],{},[47,1348,1350],{"className":49,"code":1349,"language":51,"meta":52,"style":52},"def even_numbers(limit):\n    for number in range(2, limit + 1, 2):\n        yield number\n\nfor value in even_numbers(10):\n    print(value)\n",[37,1351,1352,1365,1398,1404,1408,1425],{"__ignoreMap":52},[56,1353,1354,1356,1359,1361,1363],{"class":58,"line":59},[56,1355,63],{"class":62},[56,1357,1358],{"class":66}," even_numbers",[56,1360,71],{"class":70},[56,1362,75],{"class":74},[56,1364,78],{"class":70},[56,1366,1367,1370,1372,1374,1377,1379,1381,1383,1386,1389,1392,1394,1396],{"class":58,"line":81},[56,1368,1369],{"class":99},"    for",[56,1371,103],{"class":84},[56,1373,151],{"class":99},[56,1375,1376],{"class":167}," range",[56,1378,71],{"class":70},[56,1380,1181],{"class":92},[56,1382,515],{"class":70},[56,1384,1385],{"class":154}," limit ",[56,1387,1388],{"class":88},"+",[56,1390,1391],{"class":92}," 1",[56,1393,515],{"class":70},[56,1395,518],{"class":92},[56,1397,78],{"class":70},[56,1399,1400,1402],{"class":58,"line":96},[56,1401,118],{"class":99},[56,1403,121],{"class":84},[56,1405,1406],{"class":58,"line":115},[56,1407,139],{"emptyLinePlaceholder":138},[56,1409,1410,1412,1414,1416,1418,1420,1423],{"class":58,"line":124},[56,1411,145],{"class":99},[56,1413,148],{"class":84},[56,1415,151],{"class":99},[56,1417,1358],{"class":154},[56,1419,71],{"class":70},[56,1421,1422],{"class":92},"10",[56,1424,78],{"class":70},[56,1426,1427,1429,1431,1433],{"class":58,"line":135},[56,1428,168],{"class":167},[56,1430,71],{"class":70},[56,1432,173],{"class":154},[56,1434,176],{"class":70},[14,1436,179],{},[47,1438,1440],{"className":49,"code":1439,"language":51,"meta":52,"style":52},"2\n4\n6\n8\n10\n",[37,1441,1442,1446,1450,1454,1458],{"__ignoreMap":52},[56,1443,1444],{"class":58,"line":59},[56,1445,194],{"class":92},[56,1447,1448],{"class":58,"line":81},[56,1449,869],{"class":92},[56,1451,1452],{"class":58,"line":96},[56,1453,1302],{"class":92},[56,1455,1456],{"class":58,"line":115},[56,1457,1307],{"class":92},[56,1459,1460],{"class":58,"line":124},[56,1461,433],{"class":92},[14,1463,1464],{},"Use a list instead when:",[21,1466,1467,1473,1476],{},[24,1468,1469,1470],{},"you need indexing like ",[37,1471,1472],{},"items[0]",[24,1474,1475],{},"you need to reuse the values many times",[24,1477,1478],{},"you want all results available immediately",[42,1480,1482],{"id":1481},"limits-beginners-should-know","Limits beginners should know",[14,1484,1485],{},"Generators are useful, but they are not the same as lists.",[14,1487,1488],{},"Important limits:",[21,1490,1491,1496,1499,1502],{},[24,1492,1493,1494],{},"a generator does not support indexing like ",[37,1495,1472],{},[24,1497,1498],{},"once fully used, a generator cannot be restarted",[24,1500,1501],{},"if you need the values again, create a new generator",[24,1503,1504,1505,1508],{},"you can convert a generator to a list with ",[37,1506,1507],{},"list(generator)"," if needed",[14,1510,1511],{},"Example of converting to a list:",[47,1513,1515],{"className":49,"code":1514,"language":51,"meta":52,"style":52},"def count_up_to(limit):\n    number = 1\n    while number \u003C= limit:\n        yield number\n        number += 1\n\ngen = count_up_to(4)\nnumbers = list(gen)\n\nprint(numbers)\n",[37,1516,1517,1529,1537,1549,1555,1563,1567,1582,1597,1601],{"__ignoreMap":52},[56,1518,1519,1521,1523,1525,1527],{"class":58,"line":59},[56,1520,63],{"class":62},[56,1522,67],{"class":66},[56,1524,71],{"class":70},[56,1526,75],{"class":74},[56,1528,78],{"class":70},[56,1530,1531,1533,1535],{"class":58,"line":81},[56,1532,85],{"class":84},[56,1534,89],{"class":88},[56,1536,93],{"class":92},[56,1538,1539,1541,1543,1545,1547],{"class":58,"line":96},[56,1540,100],{"class":99},[56,1542,103],{"class":84},[56,1544,106],{"class":88},[56,1546,109],{"class":84},[56,1548,112],{"class":70},[56,1550,1551,1553],{"class":58,"line":115},[56,1552,118],{"class":99},[56,1554,121],{"class":84},[56,1556,1557,1559,1561],{"class":58,"line":124},[56,1558,127],{"class":84},[56,1560,130],{"class":88},[56,1562,93],{"class":92},[56,1564,1565],{"class":58,"line":135},[56,1566,139],{"emptyLinePlaceholder":138},[56,1568,1569,1571,1573,1575,1577,1580],{"class":58,"line":142},[56,1570,370],{"class":84},[56,1572,89],{"class":88},[56,1574,67],{"class":154},[56,1576,71],{"class":70},[56,1578,1579],{"class":92},"4",[56,1581,176],{"class":70},[56,1583,1584,1586,1588,1591,1593,1595],{"class":58,"line":164},[56,1585,1105],{"class":84},[56,1587,89],{"class":88},[56,1589,1590],{"class":656}," list",[56,1592,71],{"class":70},[56,1594,398],{"class":154},[56,1596,176],{"class":70},[56,1598,1599],{"class":58,"line":380},[56,1600,139],{"emptyLinePlaceholder":138},[56,1602,1603,1605,1607,1610],{"class":58,"line":385},[56,1604,388],{"class":167},[56,1606,71],{"class":70},[56,1608,1609],{"class":154},"numbers",[56,1611,176],{"class":70},[14,1613,179],{},[47,1615,1617],{"className":49,"code":1616,"language":51,"meta":52,"style":52},"[1, 2, 3, 4]\n",[37,1618,1619],{"__ignoreMap":52},[56,1620,1621,1623,1625,1627,1629,1631,1633,1635,1637],{"class":58,"line":59},[56,1622,564],{"class":70},[56,1624,512],{"class":92},[56,1626,515],{"class":70},[56,1628,518],{"class":92},[56,1630,515],{"class":70},[56,1632,523],{"class":92},[56,1634,515],{"class":70},[56,1636,1124],{"class":92},[56,1638,526],{"class":70},[14,1640,1641],{},"Be careful: converting a generator to a list uses up the generator.",[47,1643,1645],{"className":49,"code":1644,"language":51,"meta":52,"style":52},"gen = count_up_to(3)\n\nprint(list(gen))\nprint(list(gen))\n",[37,1646,1647,1661,1665,1680],{"__ignoreMap":52},[56,1648,1649,1651,1653,1655,1657,1659],{"class":58,"line":59},[56,1650,370],{"class":84},[56,1652,89],{"class":88},[56,1654,67],{"class":154},[56,1656,71],{"class":70},[56,1658,159],{"class":92},[56,1660,176],{"class":70},[56,1662,1663],{"class":58,"line":81},[56,1664,139],{"emptyLinePlaceholder":138},[56,1666,1667,1669,1671,1674,1676,1678],{"class":58,"line":96},[56,1668,388],{"class":167},[56,1670,71],{"class":70},[56,1672,1673],{"class":656},"list",[56,1675,71],{"class":70},[56,1677,398],{"class":154},[56,1679,401],{"class":70},[56,1681,1682,1684,1686,1688,1690,1692],{"class":58,"line":115},[56,1683,388],{"class":167},[56,1685,71],{"class":70},[56,1687,1673],{"class":656},[56,1689,71],{"class":70},[56,1691,398],{"class":154},[56,1693,401],{"class":70},[14,1695,179],{},[47,1697,1699],{"className":49,"code":1698,"language":51,"meta":52,"style":52},"[1, 2, 3]\n[]\n",[37,1700,1701,1717],{"__ignoreMap":52},[56,1702,1703,1705,1707,1709,1711,1713,1715],{"class":58,"line":59},[56,1704,564],{"class":70},[56,1706,512],{"class":92},[56,1708,515],{"class":70},[56,1710,518],{"class":92},[56,1712,515],{"class":70},[56,1714,523],{"class":92},[56,1716,526],{"class":70},[56,1718,1719],{"class":58,"line":81},[56,1720,1721],{"class":70},"[]\n",[14,1723,1724],{},"The second result is empty because the generator was already exhausted.",[42,1726,1728],{"id":1727},"common-mistakes","Common mistakes",[14,1730,1731],{},"These are some common beginner mistakes with generators:",[21,1733,1734,1742,1745,1748,1751],{},[24,1735,1736,1737,1739,1740],{},"confusing ",[37,1738,39],{}," with ",[37,1741,267],{},[24,1743,1744],{},"trying to reuse an exhausted generator",[24,1746,1747],{},"trying to index a generator like a list",[24,1749,1750],{},"expecting a generator expression to print all values by itself",[24,1752,1753,1754,1756,1757],{},"using ",[37,1755,880],{}," too many times and hitting ",[37,1758,1023],{},[14,1760,1761],{},"Useful debugging checks:",[47,1763,1765],{"className":49,"code":1764,"language":51,"meta":52,"style":52},"def count_up_to(limit):\n    number = 1\n    while number \u003C= limit:\n        yield number\n        number += 1\n\ngenerator_obj = count_up_to(3)\n\nprint(generator_obj)\nprint(type(generator_obj))\nprint(next(generator_obj))\nprint(list(generator_obj))\n",[37,1766,1767,1779,1787,1799,1805,1813,1817,1832,1836,1847,1862,1876],{"__ignoreMap":52},[56,1768,1769,1771,1773,1775,1777],{"class":58,"line":59},[56,1770,63],{"class":62},[56,1772,67],{"class":66},[56,1774,71],{"class":70},[56,1776,75],{"class":74},[56,1778,78],{"class":70},[56,1780,1781,1783,1785],{"class":58,"line":81},[56,1782,85],{"class":84},[56,1784,89],{"class":88},[56,1786,93],{"class":92},[56,1788,1789,1791,1793,1795,1797],{"class":58,"line":96},[56,1790,100],{"class":99},[56,1792,103],{"class":84},[56,1794,106],{"class":88},[56,1796,109],{"class":84},[56,1798,112],{"class":70},[56,1800,1801,1803],{"class":58,"line":115},[56,1802,118],{"class":99},[56,1804,121],{"class":84},[56,1806,1807,1809,1811],{"class":58,"line":124},[56,1808,127],{"class":84},[56,1810,130],{"class":88},[56,1812,93],{"class":92},[56,1814,1815],{"class":58,"line":135},[56,1816,139],{"emptyLinePlaceholder":138},[56,1818,1819,1822,1824,1826,1828,1830],{"class":58,"line":142},[56,1820,1821],{"class":84},"generator_obj ",[56,1823,89],{"class":88},[56,1825,67],{"class":154},[56,1827,71],{"class":70},[56,1829,159],{"class":92},[56,1831,176],{"class":70},[56,1833,1834],{"class":58,"line":164},[56,1835,139],{"emptyLinePlaceholder":138},[56,1837,1838,1840,1842,1845],{"class":58,"line":380},[56,1839,388],{"class":167},[56,1841,71],{"class":70},[56,1843,1844],{"class":154},"generator_obj",[56,1846,176],{"class":70},[56,1848,1849,1851,1853,1856,1858,1860],{"class":58,"line":385},[56,1850,388],{"class":167},[56,1852,71],{"class":70},[56,1854,1855],{"class":656},"type",[56,1857,71],{"class":70},[56,1859,1844],{"class":154},[56,1861,401],{"class":70},[56,1863,1864,1866,1868,1870,1872,1874],{"class":58,"line":404},[56,1865,388],{"class":167},[56,1867,71],{"class":70},[56,1869,393],{"class":167},[56,1871,71],{"class":70},[56,1873,1844],{"class":154},[56,1875,401],{"class":70},[56,1877,1879,1881,1883,1885,1887,1889],{"class":58,"line":1878},12,[56,1880,388],{"class":167},[56,1882,71],{"class":70},[56,1884,1673],{"class":656},[56,1886,71],{"class":70},[56,1888,1844],{"class":154},[56,1890,401],{"class":70},[14,1892,640],{},[47,1894,1896],{"className":49,"code":1895,"language":51,"meta":52,"style":52},"\u003Cgenerator object count_up_to at 0x...>\n\u003Cclass 'generator'>\n1\n[2, 3]\n",[37,1897,1898,1915,1933,1937],{"__ignoreMap":52},[56,1899,1900,1902,1904,1906,1909,1911,1913],{"class":58,"line":59},[56,1901,650],{"class":88},[56,1903,653],{"class":84},[56,1905,657],{"class":656},[56,1907,1908],{"class":84}," count_up_to at ",[56,1910,664],{"class":663},[56,1912,668],{"class":667},[56,1914,671],{"class":88},[56,1916,1917,1919,1922,1925,1928,1931],{"class":58,"line":81},[56,1918,650],{"class":88},[56,1920,1921],{"class":62},"class",[56,1923,1924],{"class":307}," '",[56,1926,1927],{"class":311},"generator",[56,1929,1930],{"class":307},"'",[56,1932,671],{"class":88},[56,1934,1935],{"class":58,"line":96},[56,1936,189],{"class":92},[56,1938,1939,1941,1943,1945,1947],{"class":58,"line":115},[56,1940,564],{"class":70},[56,1942,1181],{"class":92},[56,1944,515],{"class":70},[56,1946,523],{"class":92},[56,1948,526],{"class":70},[14,1950,1951],{},"This example shows an important detail:",[21,1953,1954,1960],{},[24,1955,1956,1959],{},[37,1957,1958],{},"next(generator_obj)"," uses the first value",[24,1961,1962,1965],{},[37,1963,1964],{},"list(generator_obj)"," only gets the remaining values",[14,1967,1968,1969,1973],{},"If you are confused about why generators work this way, reading about ",[234,1970,1972],{"href":1971},"\u002Flearn\u002Fiterators-and-iterable-objects-explained","iterators and iterable objects explained"," can help.",[42,1975,1977],{"id":1976},"faq","FAQ",[484,1979,1981],{"id":1980},"what-is-the-difference-between-a-generator-and-a-list","What is the difference between a generator and a list?",[14,1983,1984],{},"A list stores all values immediately. A generator produces values one at a time when needed.",[484,1986,1988,1989,1991],{"id":1987},"does-yield-end-the-function","Does ",[37,1990,39],{}," end the function?",[14,1993,1994,1995,1997],{},"No. ",[37,1996,39],{}," pauses the function. The function continues later from the same place.",[484,1999,2001],{"id":2000},"can-i-loop-through-a-generator-more-than-once","Can I loop through a generator more than once?",[14,2003,2004],{},"Not the same exhausted generator. Create a new generator if you need to loop again.",[484,2006,2008],{"id":2007},"should-beginners-use-generators","Should beginners use generators?",[14,2010,2011,2012,2014],{},"Yes, for simple cases. Start with basic ",[37,2013,39],{}," examples and use them when values should be produced one at a time.",[42,2016,2018],{"id":2017},"see-also","See also",[21,2020,2021,2026,2031,2036,2041],{},[24,2022,2023],{},[234,2024,2025],{"href":1971},"Iterators and iterable objects explained",[24,2027,2028],{},[234,2029,2030],{"href":1319},"List comprehensions in Python explained",[24,2032,2033],{},[234,2034,2035],{"href":241},"What is an iterator in Python",[24,2037,2038],{},[234,2039,2040],{"href":236},"What is an iterable in Python",[24,2042,2043],{},[234,2044,2045],{"href":1083},"StopIteration exception in Python explained",[2047,2048,2049],"style",{},"html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srjyR, html code.shiki .srjyR{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":52,"searchDepth":81,"depth":81,"links":2051},[2052,2053,2054,2056,2060,2061,2065,2066,2067,2068,2075],{"id":44,"depth":81,"text":45},{"id":208,"depth":81,"text":209},{"id":246,"depth":81,"text":2055},"How yield works",{"id":471,"depth":81,"text":472,"children":2057},[2058,2059],{"id":486,"depth":96,"text":487},{"id":579,"depth":96,"text":580},{"id":756,"depth":81,"text":757},{"id":1087,"depth":81,"text":1088,"children":2062},[2063,2064],{"id":1094,"depth":96,"text":1095},{"id":1200,"depth":96,"text":1201},{"id":1323,"depth":81,"text":1324},{"id":1481,"depth":81,"text":1482},{"id":1727,"depth":81,"text":1728},{"id":1976,"depth":81,"text":1977,"children":2069},[2070,2071,2073,2074],{"id":1980,"depth":96,"text":1981},{"id":1987,"depth":96,"text":2072},"Does yield end the function?",{"id":2000,"depth":96,"text":2001},{"id":2007,"depth":96,"text":2008},{"id":2017,"depth":81,"text":2018},"Master generators in python explained in our comprehensive Python beginner guide.","md",{},"\u002Flearn\u002Fgenerators-in-python-explained",{"title":5,"description":2076},"learn\u002Fgenerators-in-python-explained","yNA_3GdZvFMFAmbQLPpCJvpIRuEy89gflmUUJ4fkY00",1777585497273]