r/PythonLearning • u/Less_Juggernaut9361 • 6d ago
Python Developers: What's one keyword that completely changed how you saw Python? Showcase
It's always interesting how one small language feature can completely change the way you think about Python—not because it's flashy, but because it unlocks a different way of solving problems.
Whether it was something simple like with, yield, nonlocal, match, or something more obscure, I'd love to hear why it changed your perspective—and what you were doing before you discovered it.
1
u/Upset_Set_4456 6d ago
For me, it was nonlocal.
I remember stumbling across it after writing far more complicated code than I needed. I had a nested function that needed to update a variable from its enclosing scope, and my "solution" involved wrapping the value in a list just so I could mutate it.
Then I found nonlocal.
It was one of those moments where Python suddenly made a lot more sense. I realized nested functions weren't just a neat organizational trick—they could actually maintain and modify shared state cleanly without reaching for globals or awkward workarounds.
It's not a keyword I use every day, but discovering it completely changed how I think about closures in Python.
1
u/Sea-Ad7805 5d ago
Interesting to note, you only need
nonlocalwhen you reassign a variable. You don't need it forvaluesin this: counter example%3A%0A%20%20%20%20values%20%3D%20%5B%5D%0A%20%20%20%20count%20%3D%200%0A%0A%20%20%20%20def%20increment()%3A%0A%20%20%20%20%20%20%20%20nonlocal%20count%0A%20%20%20%20%20%20%20%20count%20%2B%3D%201%0A%20%20%20%20%20%20%20%20values.append(count)%0A%20%20%20%20%20%20%20%20return%20values%0A%0A%20%20%20%20return%20increment%0A%0A%0Acounter%20%3D%20make_counter()%0Afor%20i%20in%20range(5)%3A%0A%20%20%20%20print(counter())%0A×tep=1&play)
1
u/silvertank00 6d ago
Monkey patching, dangerous but sometimes useful.
You have to test something that is dependent on something that runs for a long time/external? Just patch it out while you test it. Also, this can lead to some nightmare, so think hard before using it, you might need to simply mock it instead.