FAQ: Scope - Modifying Scope Behavior: nonlocal Statement

This community-built FAQ covers the “Modifying Scope Behavior: nonlocal Statement” exercise from the lesson “Scope”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Learn Intermediate Python 3

FAQs on the exercise Modifying Scope Behavior: nonlocal Statement

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!
You can also find further discussion and get answers to your questions over in #get-help.

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head to #get-help and #community:tips-and-resources. If you are wanting feedback or inspiration for a project, check out #project.

Looking for motivation to keep learning? Join our wider discussions in #community

Learn more about how to use this guide.

Found a bug? Report it online, or post in #community:Codecademy-Bug-Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

I get that the point of this lesson is to demonstrate how names (a.k.a. variables) are accessible and the objects that they point to can be updated in different scopes of a script. Now that that is out of the way, I can’t help but notice that the example used seems like a terrible code practice: the functions have side-effects, in fact that’s the only point of them. Are there better use cases for accessing and update nonlocal variables?

You’re not wrong - these examples are incredibly contrived.

I’m not sure there’s a “best use case” because doing this has kind of an inherent “code smell”. You would typically structure your functions and methods to take the would-be nonlocal variables as parameters, or use OOP and build up classes to encapsulate more complicated state, etc. More generally: you should be designing your code in a way that avoids having to write directly to global / nonlocal variables like this.

Personally, in moments of laziness (or looming deadlines!), I absolutely have used the global or nonlocal keywords to quickly be able to update some higher-up state variable (usually a counter or something) from within a function without having to rewrite a whole bunch of stuff - I suspect, in fact, last minute programming is the most common use case for these keywords and if you find yourself using them extensively, you’re overdue for some refactoring :slight_smile:

1 Like