[{"data":1,"prerenderedAt":1787},["ShallowReactive",2],{"doc-\u002Fglossary\u002Fwhat-is-a-generator-in-python":3},{"id":4,"title":5,"body":6,"description":1780,"extension":1781,"meta":1782,"navigation":127,"path":1783,"seo":1784,"stem":1785,"__hash__":1786},"content\u002Fglossary\u002Fwhat-is-a-generator-in-python.md","What Is a Generator in Python?",{"type":7,"value":8,"toc":1753},"minimark",[9,13,17,20,28,33,36,39,62,66,69,162,165,185,188,210,214,217,228,231,235,241,247,315,317,332,335,351,354,358,364,483,485,530,533,549,557,561,564,569,572,639,643,646,730,733,752,761,839,841,862,866,869,872,883,886,890,900,903,914,917,979,982,985,1064,1066,1075,1079,1082,1152,1154,1183,1189,1196,1200,1203,1237,1240,1244,1247,1270,1274,1394,1396,1420,1423,1427,1430,1525,1528,1569,1572,1592,1595,1667,1671,1675,1678,1682,1687,1691,1694,1698,1701,1705,1712,1716,1746,1749],[10,11,5],"h1",{"id":12},"what-is-a-generator-in-python",[14,15,16],"p",{},"A generator in Python is an object that produces values one at a time, only when they are needed.",[14,18,19],{},"This is useful because Python does not have to create and store every value at once. For beginners, the main idea is simple: a generator lets you work through data step by step instead of building a full list immediately.",[14,21,22,23,27],{},"Generators are commonly created with a function that uses ",[24,25,26],"code",{},"yield",".",[29,30,32],"h2",{"id":31},"simple-definition","Simple definition",[14,34,35],{},"A generator is an object that gives values one at a time when Python asks for them.",[14,37,38],{},"Key points:",[40,41,42,51,57],"ul",{},[43,44,45,46,50],"li",{},"It does ",[47,48,49],"strong",{},"not"," build the whole result at once",[43,52,53,54],{},"It can be looped over with ",[24,55,56],{},"for",[43,58,59,60],{},"It is often created by a function that uses ",[24,61,26],{},[29,63,65],{"id":64},"quick-example","Quick example",[14,67,68],{},"This is the simplest generator example:",[70,71,76],"pre",{"className":72,"code":73,"language":74,"meta":75,"style":75},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","def numbers():\n    yield 1\n    yield 2\n    yield 3\n\nfor n in numbers():\n    print(n)\n","python","",[24,77,78,95,106,114,122,129,146],{"__ignoreMap":75},[79,80,83,87,91],"span",{"class":81,"line":82},"line",1,[79,84,86],{"class":85},"sbsja","def",[79,88,90],{"class":89},"sGLFI"," numbers",[79,92,94],{"class":93},"sP7_E","():\n",[79,96,98,102],{"class":81,"line":97},2,[79,99,101],{"class":100},"sVHd0","    yield",[79,103,105],{"class":104},"srdBf"," 1\n",[79,107,109,111],{"class":81,"line":108},3,[79,110,101],{"class":100},[79,112,113],{"class":104}," 2\n",[79,115,117,119],{"class":81,"line":116},4,[79,118,101],{"class":100},[79,120,121],{"class":104}," 3\n",[79,123,125],{"class":81,"line":124},5,[79,126,128],{"emptyLinePlaceholder":127},true,"\n",[79,130,132,134,138,141,144],{"class":81,"line":131},6,[79,133,56],{"class":100},[79,135,137],{"class":136},"su5hD"," n ",[79,139,140],{"class":100},"in",[79,142,90],{"class":143},"slqww",[79,145,94],{"class":93},[79,147,149,153,156,159],{"class":81,"line":148},7,[79,150,152],{"class":151},"sptTA","    print",[79,154,155],{"class":93},"(",[79,157,158],{"class":143},"n",[79,160,161],{"class":93},")\n",[14,163,164],{},"Output:",[70,166,168],{"className":72,"code":167,"language":74,"meta":75,"style":75},"1\n2\n3\n",[24,169,170,175,180],{"__ignoreMap":75},[79,171,172],{"class":81,"line":82},[79,173,174],{"class":104},"1\n",[79,176,177],{"class":81,"line":97},[79,178,179],{"class":104},"2\n",[79,181,182],{"class":81,"line":108},[79,183,184],{"class":104},"3\n",[14,186,187],{},"What happens here:",[40,189,190,198,204],{},[43,191,192,195,196],{},[24,193,194],{},"numbers()"," is a generator function because it uses ",[24,197,26],{},[43,199,200,201,203],{},"Each ",[24,202,26],{}," gives back one value",[43,205,206,207,209],{},"The ",[24,208,56],{}," loop asks for values one by one",[29,211,213],{"id":212},"why-beginners-should-care","Why beginners should care",[14,215,216],{},"Generators are helpful because they:",[40,218,219,222,225],{},[43,220,221],{},"Work well when looping through many values",[43,223,224],{},"Can use less memory than a full list",[43,226,227],{},"Show how Python can process items step by step",[14,229,230],{},"You do not need generators for every task. But they are useful when you do not want to store everything at once.",[29,232,234],{"id":233},"how-a-generator-works","How a generator works",[14,236,237,238,27],{},"A normal function usually finishes with ",[24,239,240],{},"return",[14,242,243,244,246],{},"A generator function is different. It uses ",[24,245,26],{}," to produce one value at a time.",[70,248,250],{"className":72,"code":249,"language":74,"meta":75,"style":75},"def greet():\n    yield \"Hello\"\n    yield \"World\"\n\nfor word in greet():\n    print(word)\n",[24,251,252,261,276,287,291,304],{"__ignoreMap":75},[79,253,254,256,259],{"class":81,"line":82},[79,255,86],{"class":85},[79,257,258],{"class":89}," greet",[79,260,94],{"class":93},[79,262,263,265,269,273],{"class":81,"line":97},[79,264,101],{"class":100},[79,266,268],{"class":267},"sjJ54"," \"",[79,270,272],{"class":271},"s_sjI","Hello",[79,274,275],{"class":267},"\"\n",[79,277,278,280,282,285],{"class":81,"line":108},[79,279,101],{"class":100},[79,281,268],{"class":267},[79,283,284],{"class":271},"World",[79,286,275],{"class":267},[79,288,289],{"class":81,"line":116},[79,290,128],{"emptyLinePlaceholder":127},[79,292,293,295,298,300,302],{"class":81,"line":124},[79,294,56],{"class":100},[79,296,297],{"class":136}," word ",[79,299,140],{"class":100},[79,301,258],{"class":143},[79,303,94],{"class":93},[79,305,306,308,310,313],{"class":81,"line":131},[79,307,152],{"class":151},[79,309,155],{"class":93},[79,311,312],{"class":143},"word",[79,314,161],{"class":93},[14,316,164],{},[70,318,320],{"className":72,"code":319,"language":74,"meta":75,"style":75},"Hello\nWorld\n",[24,321,322,327],{"__ignoreMap":75},[79,323,324],{"class":81,"line":82},[79,325,326],{"class":136},"Hello\n",[79,328,329],{"class":81,"line":97},[79,330,331],{"class":136},"World\n",[14,333,334],{},"The important idea is this:",[40,336,337,342,345,348],{},[43,338,339,340],{},"Python runs the function until it reaches ",[24,341,26],{},[43,343,344],{},"It sends back that value",[43,346,347],{},"The function pauses",[43,349,350],{},"When the next value is needed, the function continues from where it paused",[14,352,353],{},"That pause-and-continue behavior is what makes generators special.",[29,355,357],{"id":356},"generator-function-example","Generator function example",[14,359,360,361,363],{},"Here is a small example that shows the function pausing after each ",[24,362,26],{},":",[70,365,367],{"className":72,"code":366,"language":74,"meta":75,"style":75},"def count_up():\n    print(\"Start\")\n    yield 1\n    print(\"Middle\")\n    yield 2\n    print(\"End\")\n    yield 3\n\nfor number in count_up():\n    print(\"Got:\", number)\n",[24,368,369,378,394,400,415,421,436,442,447,461],{"__ignoreMap":75},[79,370,371,373,376],{"class":81,"line":82},[79,372,86],{"class":85},[79,374,375],{"class":89}," count_up",[79,377,94],{"class":93},[79,379,380,382,384,387,390,392],{"class":81,"line":97},[79,381,152],{"class":151},[79,383,155],{"class":93},[79,385,386],{"class":267},"\"",[79,388,389],{"class":271},"Start",[79,391,386],{"class":267},[79,393,161],{"class":93},[79,395,396,398],{"class":81,"line":108},[79,397,101],{"class":100},[79,399,105],{"class":104},[79,401,402,404,406,408,411,413],{"class":81,"line":116},[79,403,152],{"class":151},[79,405,155],{"class":93},[79,407,386],{"class":267},[79,409,410],{"class":271},"Middle",[79,412,386],{"class":267},[79,414,161],{"class":93},[79,416,417,419],{"class":81,"line":124},[79,418,101],{"class":100},[79,420,113],{"class":104},[79,422,423,425,427,429,432,434],{"class":81,"line":131},[79,424,152],{"class":151},[79,426,155],{"class":93},[79,428,386],{"class":267},[79,430,431],{"class":271},"End",[79,433,386],{"class":267},[79,435,161],{"class":93},[79,437,438,440],{"class":81,"line":148},[79,439,101],{"class":100},[79,441,121],{"class":104},[79,443,445],{"class":81,"line":444},8,[79,446,128],{"emptyLinePlaceholder":127},[79,448,450,452,455,457,459],{"class":81,"line":449},9,[79,451,56],{"class":100},[79,453,454],{"class":136}," number ",[79,456,140],{"class":100},[79,458,375],{"class":143},[79,460,94],{"class":93},[79,462,464,466,468,470,473,475,478,481],{"class":81,"line":463},10,[79,465,152],{"class":151},[79,467,155],{"class":93},[79,469,386],{"class":267},[79,471,472],{"class":271},"Got:",[79,474,386],{"class":267},[79,476,477],{"class":93},",",[79,479,480],{"class":143}," number",[79,482,161],{"class":93},[14,484,164],{},[70,486,488],{"className":72,"code":487,"language":74,"meta":75,"style":75},"Start\nGot: 1\nMiddle\nGot: 2\nEnd\nGot: 3\n",[24,489,490,495,504,509,517,522],{"__ignoreMap":75},[79,491,492],{"class":81,"line":82},[79,493,494],{"class":136},"Start\n",[79,496,497,500,502],{"class":81,"line":97},[79,498,499],{"class":136},"Got",[79,501,363],{"class":93},[79,503,105],{"class":104},[79,505,506],{"class":81,"line":108},[79,507,508],{"class":136},"Middle\n",[79,510,511,513,515],{"class":81,"line":116},[79,512,499],{"class":136},[79,514,363],{"class":93},[79,516,113],{"class":104},[79,518,519],{"class":81,"line":124},[79,520,521],{"class":136},"End\n",[79,523,524,526,528],{"class":81,"line":131},[79,525,499],{"class":136},[79,527,363],{"class":93},[79,529,121],{"class":104},[14,531,532],{},"Notice what happens:",[40,534,535,541,546],{},[43,536,537,538,540],{},"The function does ",[47,539,49],{}," run all at once",[43,542,543,544],{},"It stops at each ",[24,545,26],{},[43,547,548],{},"It continues only when the loop asks for the next value",[14,550,551,552,27],{},"If you want a fuller beginner lesson, see ",[553,554,556],"a",{"href":555},"\u002Flearn\u002Fgenerators-in-python-explained\u002F","generators in Python explained",[29,558,560],{"id":559},"generator-vs-list","Generator vs list",[14,562,563],{},"A generator and a list are not the same.",[565,566,568],"h3",{"id":567},"list","List",[14,570,571],{},"A list stores all items in memory right away.",[70,573,575],{"className":72,"code":574,"language":74,"meta":75,"style":75},"numbers = [1, 2, 3, 4]\nprint(numbers)\nprint(numbers[0])\n",[24,576,577,610,622],{"__ignoreMap":75},[79,578,579,582,586,589,592,594,597,599,602,604,607],{"class":81,"line":82},[79,580,581],{"class":136},"numbers ",[79,583,585],{"class":584},"smGrS","=",[79,587,588],{"class":93}," [",[79,590,591],{"class":104},"1",[79,593,477],{"class":93},[79,595,596],{"class":104}," 2",[79,598,477],{"class":93},[79,600,601],{"class":104}," 3",[79,603,477],{"class":93},[79,605,606],{"class":104}," 4",[79,608,609],{"class":93},"]\n",[79,611,612,615,617,620],{"class":81,"line":97},[79,613,614],{"class":151},"print",[79,616,155],{"class":93},[79,618,619],{"class":143},"numbers",[79,621,161],{"class":93},[79,623,624,626,628,630,633,636],{"class":81,"line":108},[79,625,614],{"class":151},[79,627,155],{"class":93},[79,629,619],{"class":143},[79,631,632],{"class":93},"[",[79,634,635],{"class":104},"0",[79,637,638],{"class":93},"])\n",[565,640,642],{"id":641},"generator","Generator",[14,644,645],{},"A generator produces items only when needed.",[70,647,649],{"className":72,"code":648,"language":74,"meta":75,"style":75},"def numbers():\n    yield 1\n    yield 2\n    yield 3\n    yield 4\n\ngen = numbers()\n\nfor item in gen:\n    print(item)\n",[24,650,651,659,665,671,677,684,688,700,704,719],{"__ignoreMap":75},[79,652,653,655,657],{"class":81,"line":82},[79,654,86],{"class":85},[79,656,90],{"class":89},[79,658,94],{"class":93},[79,660,661,663],{"class":81,"line":97},[79,662,101],{"class":100},[79,664,105],{"class":104},[79,666,667,669],{"class":81,"line":108},[79,668,101],{"class":100},[79,670,113],{"class":104},[79,672,673,675],{"class":81,"line":116},[79,674,101],{"class":100},[79,676,121],{"class":104},[79,678,679,681],{"class":81,"line":124},[79,680,101],{"class":100},[79,682,683],{"class":104}," 4\n",[79,685,686],{"class":81,"line":131},[79,687,128],{"emptyLinePlaceholder":127},[79,689,690,693,695,697],{"class":81,"line":148},[79,691,692],{"class":136},"gen ",[79,694,585],{"class":584},[79,696,90],{"class":143},[79,698,699],{"class":93},"()\n",[79,701,702],{"class":81,"line":444},[79,703,128],{"emptyLinePlaceholder":127},[79,705,706,708,711,713,716],{"class":81,"line":449},[79,707,56],{"class":100},[79,709,710],{"class":136}," item ",[79,712,140],{"class":100},[79,714,715],{"class":136}," gen",[79,717,718],{"class":93},":\n",[79,720,721,723,725,728],{"class":81,"line":463},[79,722,152],{"class":151},[79,724,155],{"class":93},[79,726,727],{"class":143},"item",[79,729,161],{"class":93},[14,731,732],{},"Main differences:",[40,734,735,741,746,749],{},[43,736,737,738,740],{},"A ",[47,739,567],{}," stores everything at once",[43,742,737,743,745],{},[47,744,641],{}," produces values one at a time",[43,747,748],{},"A list can be reused easily",[43,750,751],{},"A generator is usually used up as you iterate through it",[14,753,754,755,363],{},"If you want all generator values at once, you can convert it with ",[553,756,758],{"href":757},"\u002Freference\u002Fpython-list-function-explained\u002F",[24,759,760],{},"list()",[70,762,764],{"className":72,"code":763,"language":74,"meta":75,"style":75},"def numbers():\n    yield 1\n    yield 2\n    yield 3\n\ngen = numbers()\nall_values = list(gen)\n\nprint(all_values)\n",[24,765,766,774,780,786,792,796,806,824,828],{"__ignoreMap":75},[79,767,768,770,772],{"class":81,"line":82},[79,769,86],{"class":85},[79,771,90],{"class":89},[79,773,94],{"class":93},[79,775,776,778],{"class":81,"line":97},[79,777,101],{"class":100},[79,779,105],{"class":104},[79,781,782,784],{"class":81,"line":108},[79,783,101],{"class":100},[79,785,113],{"class":104},[79,787,788,790],{"class":81,"line":116},[79,789,101],{"class":100},[79,791,121],{"class":104},[79,793,794],{"class":81,"line":124},[79,795,128],{"emptyLinePlaceholder":127},[79,797,798,800,802,804],{"class":81,"line":131},[79,799,692],{"class":136},[79,801,585],{"class":584},[79,803,90],{"class":143},[79,805,699],{"class":93},[79,807,808,811,813,817,819,822],{"class":81,"line":148},[79,809,810],{"class":136},"all_values ",[79,812,585],{"class":584},[79,814,816],{"class":815},"sZMiF"," list",[79,818,155],{"class":93},[79,820,821],{"class":143},"gen",[79,823,161],{"class":93},[79,825,826],{"class":81,"line":444},[79,827,128],{"emptyLinePlaceholder":127},[79,829,830,832,834,837],{"class":81,"line":449},[79,831,614],{"class":151},[79,833,155],{"class":93},[79,835,836],{"class":143},"all_values",[79,838,161],{"class":93},[14,840,164],{},[70,842,844],{"className":72,"code":843,"language":74,"meta":75,"style":75},"[1, 2, 3]\n",[24,845,846],{"__ignoreMap":75},[79,847,848,850,852,854,856,858,860],{"class":81,"line":82},[79,849,632],{"class":93},[79,851,591],{"class":104},[79,853,477],{"class":93},[79,855,596],{"class":104},[79,857,477],{"class":93},[79,859,601],{"class":104},[79,861,609],{"class":93},[29,863,865],{"id":864},"when-to-use-a-generator","When to use a generator",[14,867,868],{},"A generator is useful when you want to process values step by step.",[14,870,871],{},"Common cases:",[40,873,874,877,880],{},[43,875,876],{},"Reading large data one piece at a time",[43,878,879],{},"Looping through many values without storing them all",[43,881,882],{},"Creating very large sequences",[14,884,885],{},"For small data, a list is often simpler. For large or streaming data, a generator can be a better choice.",[29,887,889],{"id":888},"important-beginner-note","Important beginner note",[14,891,892,893,896,897,27],{},"A generator is ",[47,894,895],{},"iterable",", but it is ",[47,898,899],{},"not a list",[14,901,902],{},"That means:",[40,904,905,908,911],{},[43,906,907],{},"You can loop over it",[43,909,910],{},"You usually cannot access items by index",[43,912,913],{},"It may be exhausted after one full loop",[14,915,916],{},"This will fail:",[70,918,920],{"className":72,"code":919,"language":74,"meta":75,"style":75},"def numbers():\n    yield 10\n    yield 20\n    yield 30\n\ngen = numbers()\nprint(gen[0])\n",[24,921,922,930,937,944,951,955,965],{"__ignoreMap":75},[79,923,924,926,928],{"class":81,"line":82},[79,925,86],{"class":85},[79,927,90],{"class":89},[79,929,94],{"class":93},[79,931,932,934],{"class":81,"line":97},[79,933,101],{"class":100},[79,935,936],{"class":104}," 10\n",[79,938,939,941],{"class":81,"line":108},[79,940,101],{"class":100},[79,942,943],{"class":104}," 20\n",[79,945,946,948],{"class":81,"line":116},[79,947,101],{"class":100},[79,949,950],{"class":104}," 30\n",[79,952,953],{"class":81,"line":124},[79,954,128],{"emptyLinePlaceholder":127},[79,956,957,959,961,963],{"class":81,"line":131},[79,958,692],{"class":136},[79,960,585],{"class":584},[79,962,90],{"class":143},[79,964,699],{"class":93},[79,966,967,969,971,973,975,977],{"class":81,"line":148},[79,968,614],{"class":151},[79,970,155],{"class":93},[79,972,821],{"class":143},[79,974,632],{"class":93},[79,976,635],{"class":104},[79,978,638],{"class":93},[14,980,981],{},"This causes an error because generators do not support indexing.",[14,983,984],{},"If you need indexing, convert the generator to a list first:",[70,986,988],{"className":72,"code":987,"language":74,"meta":75,"style":75},"def numbers():\n    yield 10\n    yield 20\n    yield 30\n\ngen = numbers()\nvalues = list(gen)\n\nprint(values[0])\n",[24,989,990,998,1004,1010,1016,1020,1030,1045,1049],{"__ignoreMap":75},[79,991,992,994,996],{"class":81,"line":82},[79,993,86],{"class":85},[79,995,90],{"class":89},[79,997,94],{"class":93},[79,999,1000,1002],{"class":81,"line":97},[79,1001,101],{"class":100},[79,1003,936],{"class":104},[79,1005,1006,1008],{"class":81,"line":108},[79,1007,101],{"class":100},[79,1009,943],{"class":104},[79,1011,1012,1014],{"class":81,"line":116},[79,1013,101],{"class":100},[79,1015,950],{"class":104},[79,1017,1018],{"class":81,"line":124},[79,1019,128],{"emptyLinePlaceholder":127},[79,1021,1022,1024,1026,1028],{"class":81,"line":131},[79,1023,692],{"class":136},[79,1025,585],{"class":584},[79,1027,90],{"class":143},[79,1029,699],{"class":93},[79,1031,1032,1035,1037,1039,1041,1043],{"class":81,"line":148},[79,1033,1034],{"class":136},"values ",[79,1036,585],{"class":584},[79,1038,816],{"class":815},[79,1040,155],{"class":93},[79,1042,821],{"class":143},[79,1044,161],{"class":93},[79,1046,1047],{"class":81,"line":444},[79,1048,128],{"emptyLinePlaceholder":127},[79,1050,1051,1053,1055,1058,1060,1062],{"class":81,"line":449},[79,1052,614],{"class":151},[79,1054,155],{"class":93},[79,1056,1057],{"class":143},"values",[79,1059,632],{"class":93},[79,1061,635],{"class":104},[79,1063,638],{"class":93},[14,1065,164],{},[70,1067,1069],{"className":72,"code":1068,"language":74,"meta":75,"style":75},"10\n",[24,1070,1071],{"__ignoreMap":75},[79,1072,1073],{"class":81,"line":82},[79,1074,1068],{"class":104},[29,1076,1078],{"id":1077},"generator-expression","Generator expression",[14,1080,1081],{},"You can also create a generator with parentheses.",[70,1083,1085],{"className":72,"code":1084,"language":74,"meta":75,"style":75},"squares = (x * x for x in range(5))\n\nfor value in squares:\n    print(value)\n",[24,1086,1087,1123,1127,1141],{"__ignoreMap":75},[79,1088,1089,1092,1094,1097,1100,1103,1106,1108,1110,1112,1115,1117,1120],{"class":81,"line":82},[79,1090,1091],{"class":136},"squares ",[79,1093,585],{"class":584},[79,1095,1096],{"class":93}," (",[79,1098,1099],{"class":136},"x ",[79,1101,1102],{"class":584},"*",[79,1104,1105],{"class":136}," x ",[79,1107,56],{"class":100},[79,1109,1105],{"class":136},[79,1111,140],{"class":100},[79,1113,1114],{"class":151}," range",[79,1116,155],{"class":93},[79,1118,1119],{"class":104},"5",[79,1121,1122],{"class":93},"))\n",[79,1124,1125],{"class":81,"line":97},[79,1126,128],{"emptyLinePlaceholder":127},[79,1128,1129,1131,1134,1136,1139],{"class":81,"line":108},[79,1130,56],{"class":100},[79,1132,1133],{"class":136}," value ",[79,1135,140],{"class":100},[79,1137,1138],{"class":136}," squares",[79,1140,718],{"class":93},[79,1142,1143,1145,1147,1150],{"class":81,"line":116},[79,1144,152],{"class":151},[79,1146,155],{"class":93},[79,1148,1149],{"class":143},"value",[79,1151,161],{"class":93},[14,1153,164],{},[70,1155,1157],{"className":72,"code":1156,"language":74,"meta":75,"style":75},"0\n1\n4\n9\n16\n",[24,1158,1159,1164,1168,1173,1178],{"__ignoreMap":75},[79,1160,1161],{"class":81,"line":82},[79,1162,1163],{"class":104},"0\n",[79,1165,1166],{"class":81,"line":97},[79,1167,174],{"class":104},[79,1169,1170],{"class":81,"line":108},[79,1171,1172],{"class":104},"4\n",[79,1174,1175],{"class":81,"line":116},[79,1176,1177],{"class":104},"9\n",[79,1179,1180],{"class":81,"line":124},[79,1181,1182],{"class":104},"16\n",[14,1184,1185,1186,27],{},"This is called a ",[47,1187,1188],{},"generator expression",[14,1190,1191,1192,27],{},"It looks similar to a list comprehension, but it does not build a full list right away. If you want to compare the two, see ",[553,1193,1195],{"href":1194},"\u002Flearn\u002Flist-comprehensions-in-python-explained\u002F","list comprehensions in Python explained",[29,1197,1199],{"id":1198},"related-concepts","Related concepts",[14,1201,1202],{},"These terms are closely connected:",[40,1204,1205,1219,1231],{},[43,1206,1207,1210,1211,1214,1215],{},[47,1208,1209],{},"Iterable",": something you can loop over",[1212,1213],"br",{},"\nSee ",[553,1216,1218],{"href":1217},"\u002Fglossary\u002Fwhat-is-an-iterable-in-python\u002F","what is an iterable in Python",[43,1220,1221,1224,1225,1214,1227],{},[47,1222,1223],{},"Iterator",": an object that returns the next item",[1212,1226],{},[553,1228,1230],{"href":1229},"\u002Fglossary\u002Fwhat-is-an-iterator-in-python\u002F","what is an iterator in Python",[43,1232,1233,1236],{},[47,1234,1235],{},"List comprehension",": creates a list, unlike a generator expression",[14,1238,1239],{},"A generator is part of Python’s iteration system, but for beginners, the main thing to remember is that it gives values one by one.",[29,1241,1243],{"id":1242},"common-mistakes","Common mistakes",[14,1245,1246],{},"Beginners often run into these problems:",[40,1248,1249,1252,1258,1261],{},[43,1250,1251],{},"Thinking a generator is the same as a list",[43,1253,1254,1255],{},"Trying to access a generator with an index like ",[24,1256,1257],{},"my_gen[0]",[43,1259,1260],{},"Forgetting that a generator may be empty after one full loop",[43,1262,1263,1264,1266,1267,1269],{},"Using ",[24,1265,240],{}," when ",[24,1268,26],{}," is needed",[565,1271,1273],{"id":1272},"example-generator-gets-exhausted","Example: generator gets exhausted",[70,1275,1277],{"className":72,"code":1276,"language":74,"meta":75,"style":75},"def numbers():\n    yield 1\n    yield 2\n    yield 3\n\ngen = numbers()\n\nfor item in gen:\n    print(item)\n\nprint(\"Loop again:\")\n\nfor item in gen:\n    print(item)\n",[24,1278,1279,1287,1293,1299,1305,1309,1319,1323,1335,1345,1349,1365,1370,1383],{"__ignoreMap":75},[79,1280,1281,1283,1285],{"class":81,"line":82},[79,1282,86],{"class":85},[79,1284,90],{"class":89},[79,1286,94],{"class":93},[79,1288,1289,1291],{"class":81,"line":97},[79,1290,101],{"class":100},[79,1292,105],{"class":104},[79,1294,1295,1297],{"class":81,"line":108},[79,1296,101],{"class":100},[79,1298,113],{"class":104},[79,1300,1301,1303],{"class":81,"line":116},[79,1302,101],{"class":100},[79,1304,121],{"class":104},[79,1306,1307],{"class":81,"line":124},[79,1308,128],{"emptyLinePlaceholder":127},[79,1310,1311,1313,1315,1317],{"class":81,"line":131},[79,1312,692],{"class":136},[79,1314,585],{"class":584},[79,1316,90],{"class":143},[79,1318,699],{"class":93},[79,1320,1321],{"class":81,"line":148},[79,1322,128],{"emptyLinePlaceholder":127},[79,1324,1325,1327,1329,1331,1333],{"class":81,"line":444},[79,1326,56],{"class":100},[79,1328,710],{"class":136},[79,1330,140],{"class":100},[79,1332,715],{"class":136},[79,1334,718],{"class":93},[79,1336,1337,1339,1341,1343],{"class":81,"line":449},[79,1338,152],{"class":151},[79,1340,155],{"class":93},[79,1342,727],{"class":143},[79,1344,161],{"class":93},[79,1346,1347],{"class":81,"line":463},[79,1348,128],{"emptyLinePlaceholder":127},[79,1350,1352,1354,1356,1358,1361,1363],{"class":81,"line":1351},11,[79,1353,614],{"class":151},[79,1355,155],{"class":93},[79,1357,386],{"class":267},[79,1359,1360],{"class":271},"Loop again:",[79,1362,386],{"class":267},[79,1364,161],{"class":93},[79,1366,1368],{"class":81,"line":1367},12,[79,1369,128],{"emptyLinePlaceholder":127},[79,1371,1373,1375,1377,1379,1381],{"class":81,"line":1372},13,[79,1374,56],{"class":100},[79,1376,710],{"class":136},[79,1378,140],{"class":100},[79,1380,715],{"class":136},[79,1382,718],{"class":93},[79,1384,1386,1388,1390,1392],{"class":81,"line":1385},14,[79,1387,152],{"class":151},[79,1389,155],{"class":93},[79,1391,727],{"class":143},[79,1393,161],{"class":93},[14,1395,164],{},[70,1397,1399],{"className":72,"code":1398,"language":74,"meta":75,"style":75},"1\n2\n3\nLoop again:\n",[24,1400,1401,1405,1409,1413],{"__ignoreMap":75},[79,1402,1403],{"class":81,"line":82},[79,1404,174],{"class":104},[79,1406,1407],{"class":81,"line":97},[79,1408,179],{"class":104},[79,1410,1411],{"class":81,"line":108},[79,1412,184],{"class":104},[79,1414,1415,1418],{"class":81,"line":116},[79,1416,1417],{"class":136},"Loop again",[79,1419,718],{"class":93},[14,1421,1422],{},"The second loop prints nothing because the generator has already been used up.",[29,1424,1426],{"id":1425},"useful-checks","Useful checks",[14,1428,1429],{},"These simple commands can help you understand what a generator is doing:",[70,1431,1433],{"className":72,"code":1432,"language":74,"meta":75,"style":75},"def numbers():\n    yield 1\n    yield 2\n    yield 3\n\nmy_generator = numbers()\n\nprint(type(my_generator))\nprint(next(my_generator))\nprint(list(my_generator))\n",[24,1434,1435,1443,1449,1455,1461,1465,1476,1480,1496,1511],{"__ignoreMap":75},[79,1436,1437,1439,1441],{"class":81,"line":82},[79,1438,86],{"class":85},[79,1440,90],{"class":89},[79,1442,94],{"class":93},[79,1444,1445,1447],{"class":81,"line":97},[79,1446,101],{"class":100},[79,1448,105],{"class":104},[79,1450,1451,1453],{"class":81,"line":108},[79,1452,101],{"class":100},[79,1454,113],{"class":104},[79,1456,1457,1459],{"class":81,"line":116},[79,1458,101],{"class":100},[79,1460,121],{"class":104},[79,1462,1463],{"class":81,"line":124},[79,1464,128],{"emptyLinePlaceholder":127},[79,1466,1467,1470,1472,1474],{"class":81,"line":131},[79,1468,1469],{"class":136},"my_generator ",[79,1471,585],{"class":584},[79,1473,90],{"class":143},[79,1475,699],{"class":93},[79,1477,1478],{"class":81,"line":148},[79,1479,128],{"emptyLinePlaceholder":127},[79,1481,1482,1484,1486,1489,1491,1494],{"class":81,"line":444},[79,1483,614],{"class":151},[79,1485,155],{"class":93},[79,1487,1488],{"class":815},"type",[79,1490,155],{"class":93},[79,1492,1493],{"class":143},"my_generator",[79,1495,1122],{"class":93},[79,1497,1498,1500,1502,1505,1507,1509],{"class":81,"line":449},[79,1499,614],{"class":151},[79,1501,155],{"class":93},[79,1503,1504],{"class":151},"next",[79,1506,155],{"class":93},[79,1508,1493],{"class":143},[79,1510,1122],{"class":93},[79,1512,1513,1515,1517,1519,1521,1523],{"class":81,"line":463},[79,1514,614],{"class":151},[79,1516,155],{"class":93},[79,1518,567],{"class":815},[79,1520,155],{"class":93},[79,1522,1493],{"class":143},[79,1524,1122],{"class":93},[14,1526,1527],{},"Possible output:",[70,1529,1531],{"className":72,"code":1530,"language":74,"meta":75,"style":75},"\u003Cclass 'generator'>\n1\n[2, 3]\n",[24,1532,1533,1552,1556],{"__ignoreMap":75},[79,1534,1535,1538,1541,1544,1546,1549],{"class":81,"line":82},[79,1536,1537],{"class":584},"\u003C",[79,1539,1540],{"class":85},"class",[79,1542,1543],{"class":267}," '",[79,1545,641],{"class":271},[79,1547,1548],{"class":267},"'",[79,1550,1551],{"class":584},">\n",[79,1553,1554],{"class":81,"line":97},[79,1555,174],{"class":104},[79,1557,1558,1560,1563,1565,1567],{"class":81,"line":108},[79,1559,632],{"class":93},[79,1561,1562],{"class":104},"2",[79,1564,477],{"class":93},[79,1566,601],{"class":104},[79,1568,609],{"class":93},[14,1570,1571],{},"Why this output matters:",[40,1573,1574,1580,1586],{},[43,1575,1576,1579],{},[24,1577,1578],{},"type(my_generator)"," shows that the object is a generator",[43,1581,1582,1585],{},[24,1583,1584],{},"next(my_generator)"," gets the next value",[43,1587,1588,1591],{},[24,1589,1590],{},"list(my_generator)"," collects the remaining values into a list",[14,1593,1594],{},"You can also inspect it with a loop:",[70,1596,1598],{"className":72,"code":1597,"language":74,"meta":75,"style":75},"def numbers():\n    yield 1\n    yield 2\n    yield 3\n\nmy_generator = numbers()\n\nfor item in my_generator:\n    print(item)\n",[24,1599,1600,1608,1614,1620,1626,1630,1640,1644,1657],{"__ignoreMap":75},[79,1601,1602,1604,1606],{"class":81,"line":82},[79,1603,86],{"class":85},[79,1605,90],{"class":89},[79,1607,94],{"class":93},[79,1609,1610,1612],{"class":81,"line":97},[79,1611,101],{"class":100},[79,1613,105],{"class":104},[79,1615,1616,1618],{"class":81,"line":108},[79,1617,101],{"class":100},[79,1619,113],{"class":104},[79,1621,1622,1624],{"class":81,"line":116},[79,1623,101],{"class":100},[79,1625,121],{"class":104},[79,1627,1628],{"class":81,"line":124},[79,1629,128],{"emptyLinePlaceholder":127},[79,1631,1632,1634,1636,1638],{"class":81,"line":131},[79,1633,1469],{"class":136},[79,1635,585],{"class":584},[79,1637,90],{"class":143},[79,1639,699],{"class":93},[79,1641,1642],{"class":81,"line":148},[79,1643,128],{"emptyLinePlaceholder":127},[79,1645,1646,1648,1650,1652,1655],{"class":81,"line":444},[79,1647,56],{"class":100},[79,1649,710],{"class":136},[79,1651,140],{"class":100},[79,1653,1654],{"class":136}," my_generator",[79,1656,718],{"class":93},[79,1658,1659,1661,1663,1665],{"class":81,"line":449},[79,1660,152],{"class":151},[79,1662,155],{"class":93},[79,1664,727],{"class":143},[79,1666,161],{"class":93},[29,1668,1670],{"id":1669},"faq","FAQ",[565,1672,1674],{"id":1673},"what-is-a-generator-in-python-in-simple-words","What is a generator in Python in simple words?",[14,1676,1677],{},"It is an object that gives values one at a time instead of storing them all at once.",[565,1679,1681],{"id":1680},"what-does-yield-do-in-python","What does yield do in Python?",[14,1683,1684,1686],{},[24,1685,26],{}," sends back one value and pauses the function until the next value is requested.",[565,1688,1690],{"id":1689},"is-a-generator-the-same-as-a-list","Is a generator the same as a list?",[14,1692,1693],{},"No. A list stores all items immediately, while a generator produces items as needed.",[565,1695,1697],{"id":1696},"when-should-i-use-a-generator","When should I use a generator?",[14,1699,1700],{},"Use one when you want to loop through many values without keeping all of them in memory at once.",[565,1702,1704],{"id":1703},"can-i-convert-a-generator-to-a-list","Can I convert a generator to a list?",[14,1706,1707,1708,1711],{},"Yes. Use ",[24,1709,1710],{},"list(generator_object)"," if you want all values at once.",[29,1713,1715],{"id":1714},"see-also","See also",[40,1717,1718,1723,1728,1733,1738],{},[43,1719,1720],{},[553,1721,1722],{"href":555},"Generators in Python explained",[43,1724,1725],{},[553,1726,1727],{"href":1229},"What is an iterator in Python",[43,1729,1730],{},[553,1731,1732],{"href":1217},"What is an iterable in Python",[43,1734,1735],{},[553,1736,1737],{"href":1194},"List comprehensions in Python explained",[43,1739,1740],{},[553,1741,1742,1743,1745],{"href":757},"Python ",[24,1744,760],{}," function explained",[14,1747,1748],{},"If this topic makes sense now, the best next step is to read a beginner-friendly lesson that compares generators, iterables, and iterators side by side with simple examples.",[1750,1751,1752],"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 .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 .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":75,"searchDepth":97,"depth":97,"links":1754},[1755,1756,1757,1758,1759,1760,1764,1765,1766,1767,1768,1771,1772,1779],{"id":31,"depth":97,"text":32},{"id":64,"depth":97,"text":65},{"id":212,"depth":97,"text":213},{"id":233,"depth":97,"text":234},{"id":356,"depth":97,"text":357},{"id":559,"depth":97,"text":560,"children":1761},[1762,1763],{"id":567,"depth":108,"text":568},{"id":641,"depth":108,"text":642},{"id":864,"depth":97,"text":865},{"id":888,"depth":97,"text":889},{"id":1077,"depth":97,"text":1078},{"id":1198,"depth":97,"text":1199},{"id":1242,"depth":97,"text":1243,"children":1769},[1770],{"id":1272,"depth":108,"text":1273},{"id":1425,"depth":97,"text":1426},{"id":1669,"depth":97,"text":1670,"children":1773},[1774,1775,1776,1777,1778],{"id":1673,"depth":108,"text":1674},{"id":1680,"depth":108,"text":1681},{"id":1689,"depth":108,"text":1690},{"id":1696,"depth":108,"text":1697},{"id":1703,"depth":108,"text":1704},{"id":1714,"depth":97,"text":1715},"Master what is a generator in python in our comprehensive Python beginner guide.","md",{},"\u002Fglossary\u002Fwhat-is-a-generator-in-python",{"title":5,"description":1780},"glossary\u002Fwhat-is-a-generator-in-python","ObJYC8wVdnyKARrx5IbUqzNrdbDHLkvuyTqgP64Gd_A",1777585468115]