[{"data":1,"prerenderedAt":690},["ShallowReactive",2],{"page-\u002Fpython":3},{"id":4,"title":5,"body":6,"description":16,"extension":683,"meta":684,"navigation":685,"path":686,"seo":687,"stem":688,"__hash__":689},"content\u002Fpython\u002Findex.md","Python: Zero to Hero",{"type":7,"value":8,"toc":668},"minimark",[9,13,17,22,52,56,59,63,68,192,196,297,301,385,389,503,507,571,575],[10,11,5],"h1",{"id":12},"python-zero-to-hero",[14,15,16],"p",{},"A complete quiz-based curriculum covering Python from first principles to expert-level, production-grade knowledge. Python's simplicity hides a lot of nuance — this track is built around the surprises that trip up even experienced developers.",[18,19,21],"h2",{"id":20},"how-to-use-this-quiz-track","How to Use This Quiz Track",[23,24,25,29,32,40],"ul",{},[26,27,28],"li",{},"Work through the parts in order; later quizzes assume comfort with core data structures and OOP from earlier parts.",[26,30,31],{},"Each quiz has 20 multiple-choice questions, ordered from basic recall to edge cases to best-practice judgment calls.",[26,33,34,35,39],{},"Click ",[36,37,38],"strong",{},"Show Answer"," only after committing to a choice — the explanations cover the underlying mechanism (mutability, the GIL, MRO, descriptor protocol), not just the right letter.",[26,41,42,43,47,48,51],{},"Expect classic \"wat\" moments — mutable default arguments, late-binding closures, and ",[44,45,46],"code",{},"is"," vs ",[44,49,50],{},"=="," — turned into quiz questions.",[18,53,55],{"id":54},"prerequisites","Prerequisites",[14,57,58],{},"None for Part 1. Comfort with basic programming concepts (variables, loops) helps but isn't required.",[18,60,62],{"id":61},"curriculum","Curriculum",[64,65,67],"h3",{"id":66},"part-1-foundations","Part 1 — Foundations",[69,70,71,87],"table",{},[72,73,74],"thead",{},[75,76,77,81,84],"tr",{},[78,79,80],"th",{},"#",[78,82,83],{},"Topic",[78,85,86],{},"Why It Matters",[88,89,90,106,126,147,164,178],"tbody",{},[75,91,92,96,103],{},[93,94,95],"td",{},"01",[93,97,98],{},[99,100,102],"a",{"href":101},"\u002Fpython\u002F01-introduction-and-setup","Introduction & Setup",[93,104,105],{},"CPython vs. other implementations and version differences (2 vs 3) shape everything downstream.",[75,107,108,111,117],{},[93,109,110],{},"02",[93,112,113],{},[99,114,116],{"href":115},"\u002Fpython\u002F02-variables-and-data-types","Variables & Data Types",[93,118,119,120,122,123,125],{},"Dynamic typing, object identity, and small-int caching produce classic ",[44,121,46],{},"-vs-",[44,124,50],{}," gotchas.",[75,127,128,131,137],{},[93,129,130],{},"03",[93,132,133],{},[99,134,136],{"href":135},"\u002Fpython\u002F03-operators-and-expressions","Operators & Expressions",[93,138,139,140,47,143,146],{},"Chained comparisons, ",[44,141,142],{},"\u002F\u002F",[44,144,145],{},"\u002F",", and operator overloading via dunder methods are frequent traps.",[75,148,149,152,158],{},[93,150,151],{},"04",[93,153,154],{},[99,155,157],{"href":156},"\u002Fpython\u002F04-control-flow","Control Flow",[93,159,160,163],{},[44,161,162],{},"for...else",", walrus operator, and truthy\u002Ffalsy rules for custom objects surprise newcomers.",[75,165,166,169,175],{},[93,167,168],{},"05",[93,170,171],{},[99,172,174],{"href":173},"\u002Fpython\u002F05-functions","Functions",[93,176,177],{},"Mutable default arguments are Python's most famous footgun.",[75,179,180,183,189],{},[93,181,182],{},"06",[93,184,185],{},[99,186,188],{"href":187},"\u002Fpython\u002F06-strings-and-text","Strings & Text",[93,190,191],{},"Immutability, encoding pitfalls, and f-string evaluation order matter in real code.",[64,193,195],{"id":194},"part-2-core-data-structures","Part 2 — Core Data Structures",[69,197,198,208],{},[72,199,200],{},[75,201,202,204,206],{},[78,203,80],{},[78,205,83],{},[78,207,86],{},[88,209,210,224,238,252,283],{},[75,211,212,215,221],{},[93,213,214],{},"07",[93,216,217],{},[99,218,220],{"href":219},"\u002Fpython\u002F07-lists-and-tuples","Lists & Tuples",[93,222,223],{},"Shallow copies, list aliasing, and tuple immutability-of-reference-not-contents are daily bugs.",[75,225,226,229,235],{},[93,227,228],{},"08",[93,230,231],{},[99,232,234],{"href":233},"\u002Fpython\u002F08-dictionaries-and-sets","Dictionaries & Sets",[93,236,237],{},"Hashability rules and insertion-order guarantees (3.7+) affect correctness and performance.",[75,239,240,243,249],{},[93,241,242],{},"09",[93,244,245],{},[99,246,248],{"href":247},"\u002Fpython\u002F09-comprehensions-and-generators","Comprehensions & Generators",[93,250,251],{},"Lazy evaluation and comprehension scoping are common sources of subtle bugs.",[75,253,254,257,263],{},[93,255,256],{},"10",[93,258,259],{},[99,260,262],{"href":261},"\u002Fpython\u002F10-functional-programming","Functional Programming",[93,264,265,145,268,145,271,274,275,278,279,282],{},[44,266,267],{},"map",[44,269,270],{},"filter",[44,272,273],{},"reduce",", ",[44,276,277],{},"lambda"," limitations, and ",[44,280,281],{},"functools"," are idiomatic in data-heavy code.",[75,284,285,288,294],{},[93,286,287],{},"11",[93,289,290],{},[99,291,293],{"href":292},"\u002Fpython\u002F11-closures-and-decorators","Closures & Decorators",[93,295,296],{},"Late-binding closures in loops and decorator argument order are classic interview gotchas.",[64,298,300],{"id":299},"part-3-oop-design","Part 3 — OOP & Design",[69,302,303,313],{},[72,304,305],{},[75,306,307,309,311],{},[78,308,80],{},[78,310,83],{},[78,312,86],{},[88,314,315,329,347,367],{},[75,316,317,320,326],{},[93,318,319],{},"12",[93,321,322],{},[99,323,325],{"href":324},"\u002Fpython\u002F12-classes-and-objects","Classes & Objects",[93,327,328],{},"Class vs. instance attributes and mutable class-level defaults cause shared-state bugs.",[75,330,331,334,340],{},[93,332,333],{},"13",[93,335,336],{},[99,337,339],{"href":338},"\u002Fpython\u002F13-inheritance-and-polymorphism","Inheritance & Polymorphism",[93,341,342,343,346],{},"Method Resolution Order (MRO) and ",[44,344,345],{},"super()"," in multiple inheritance are frequently misunderstood.",[75,348,349,352,358],{},[93,350,351],{},"14",[93,353,354],{},[99,355,357],{"href":356},"\u002Fpython\u002F14-magic-methods-and-protocols","Magic Methods & Protocols",[93,359,360,145,363,366],{},[44,361,362],{},"__eq__",[44,364,365],{},"__hash__"," consistency and operator dunders define how objects behave idiomatically.",[75,368,369,372,378],{},[93,370,371],{},"15",[93,373,374],{},[99,375,377],{"href":376},"\u002Fpython\u002F15-properties-and-descriptors","Properties & Descriptors",[93,379,380,381,384],{},"The descriptor protocol underlies ",[44,382,383],{},"@property",", ORMs, and much of Python's \"magic.\"",[64,386,388],{"id":387},"part-4-robustness-io","Part 4 — Robustness & I\u002FO",[69,390,391,401],{},[72,392,393],{},[75,394,395,397,399],{},[78,396,80],{},[78,398,83],{},[78,400,86],{},[88,402,403,429,447,465,486],{},[75,404,405,408,414],{},[93,406,407],{},"16",[93,409,410],{},[99,411,413],{"href":412},"\u002Fpython\u002F16-error-handling","Error Handling",[93,415,416,417,420,421,424,425,428],{},"Bare ",[44,418,419],{},"except",", exception chaining, and ",[44,422,423],{},"finally","-with-",[44,426,427],{},"return"," interactions cause silent bugs.",[75,430,431,434,440],{},[93,432,433],{},"17",[93,435,436],{},[99,437,439],{"href":438},"\u002Fpython\u002F17-modules-and-packages","Modules & Packages",[93,441,442,443,446],{},"Circular imports and ",[44,444,445],{},"__init__.py"," semantics are frequent real-world stumbling blocks.",[75,448,449,452,458],{},[93,450,451],{},"18",[93,453,454],{},[99,455,457],{"href":456},"\u002Fpython\u002F18-file-io-and-serialization","File I\u002FO & Serialization",[93,459,460,461,464],{},"Context managers, encoding defaults, and ",[44,462,463],{},"pickle"," security risks matter in production.",[75,466,467,470,476],{},[93,468,469],{},"19",[93,471,472],{},[99,473,475],{"href":474},"\u002Fpython\u002F19-iterators-and-context-managers","Iterators & Context Managers",[93,477,478,479,145,482,485],{},"The iterator protocol and ",[44,480,481],{},"__enter__",[44,483,484],{},"__exit__"," exception suppression are easy to misuse.",[75,487,488,491,497],{},[93,489,490],{},"20",[93,492,493],{},[99,494,496],{"href":495},"\u002Fpython\u002F20-type-hints-and-typing","Type Hints & Typing",[93,498,499,502],{},[44,500,501],{},"Optional",", generics, and runtime-vs-static-only enforcement are widely misunderstood.",[64,504,506],{"id":505},"part-5-concurrency-meta","Part 5 — Concurrency & Meta",[69,508,509,519],{},[72,510,511],{},[75,512,513,515,517],{},[78,514,80],{},[78,516,83],{},[78,518,86],{},[88,520,521,535,553],{},[75,522,523,526,532],{},[93,524,525],{},"21",[93,527,528],{},[99,529,531],{"href":530},"\u002Fpython\u002F21-concurrency-threading-and-multiprocessing","Concurrency: Threading & Multiprocessing",[93,533,534],{},"The GIL means threads don't parallelize CPU-bound work — a top source of design mistakes.",[75,536,537,540,546],{},[93,538,539],{},"22",[93,541,542],{},[99,543,545],{"href":544},"\u002Fpython\u002F22-async-await","Async\u002FAwait",[93,547,548,549,552],{},"Blocking calls inside ",[44,550,551],{},"async def"," silently kill concurrency without raising an error.",[75,554,555,558,564],{},[93,556,557],{},"23",[93,559,560],{},[99,561,563],{"href":562},"\u002Fpython\u002F23-metaprogramming","Metaprogramming",[93,565,566,567,570],{},"Metaclasses, ",[44,568,569],{},"__init_subclass__",", and dynamic attribute access power frameworks like Django.",[64,572,574],{"id":573},"part-6-professional-expert","Part 6 — Professional & Expert",[69,576,577,587],{},[72,578,579],{},[75,580,581,583,585],{},[78,582,80],{},[78,584,83],{},[78,586,86],{},[88,588,589,603,621,635,654],{},[75,590,591,594,600],{},[93,592,593],{},"24",[93,595,596],{},[99,597,599],{"href":598},"\u002Fpython\u002F24-testing","Testing",[93,601,602],{},"Fixture scope, mocking pitfalls, and parametrization determine test suite trustworthiness.",[75,604,605,608,614],{},[93,606,607],{},"25",[93,609,610],{},[99,611,613],{"href":612},"\u002Fpython\u002F25-packaging-and-virtual-environments","Packaging & Virtual Environments",[93,615,616,617,620],{},"Dependency resolution and ",[44,618,619],{},"pyproject.toml"," conventions are essential for shipping real projects.",[75,622,623,626,632],{},[93,624,625],{},"26",[93,627,628],{},[99,629,631],{"href":630},"\u002Fpython\u002F26-performance-and-optimization","Performance & Optimization",[93,633,634],{},"Profiling before optimizing, and knowing where CPython is slow, prevents wasted effort.",[75,636,637,640,646],{},[93,638,639],{},"27",[93,641,642],{},[99,643,645],{"href":644},"\u002Fpython\u002F27-security","Security",[93,647,648,145,651,653],{},[44,649,650],{},"eval",[44,652,463],{}," risks and injection vectors are the most common Python vulnerabilities.",[75,655,656,659,665],{},[93,657,658],{},"28",[93,660,661],{},[99,662,664],{"href":663},"\u002Fpython\u002F28-exercises-and-projects","Exercises & Projects (Capstone)",[93,666,667],{},"A mixed-review capstone spanning generators, decorators, OOP, and concurrency.",{"title":669,"searchDepth":670,"depth":670,"links":671},"",2,[672,673,674],{"id":20,"depth":670,"text":21},{"id":54,"depth":670,"text":55},{"id":61,"depth":670,"text":62,"children":675},[676,678,679,680,681,682],{"id":66,"depth":677,"text":67},3,{"id":194,"depth":677,"text":195},{"id":299,"depth":677,"text":300},{"id":387,"depth":677,"text":388},{"id":505,"depth":677,"text":506},{"id":573,"depth":677,"text":574},"md",{},true,"\u002Fpython",{"title":5,"description":16},"python\u002Findex","iZwUlYxTbjKCkiu9TH3SCDGSFWWKSTHvecHFh62fIEA",1787335398324]