diff --git a/python-scope-legb-rule/README.md b/python-scope-legb-rule/README.md new file mode 100644 index 0000000000..eff213f588 --- /dev/null +++ b/python-scope-legb-rule/README.md @@ -0,0 +1,3 @@ +# Python Scope and the LEGB Rule: Resolving Names in Your Code + +This folder provides the code examples for the Real Python tutorial [Python Scope and the LEGB Rule: Resolving Names in Your Code](https://realpython.com/python-scope-legb-rule/). diff --git a/python-scope-legb-rule/calculations.py b/python-scope-legb-rule/calculations.py new file mode 100644 index 0000000000..dc588038ba --- /dev/null +++ b/python-scope-legb-rule/calculations.py @@ -0,0 +1,10 @@ +def square(base): + result = base**2 + print(f"The square of {base} is: {result}") + + +def cube(base): + result = base**3 + print(dir()) + print(vars()) + print(f"The cube of {base} is: {result}") diff --git a/python-scope-legb-rule/counter.py b/python-scope-legb-rule/counter.py new file mode 100644 index 0000000000..bd54f947b8 --- /dev/null +++ b/python-scope-legb-rule/counter.py @@ -0,0 +1,10 @@ +counter = 0 # A global name + + +def update_counter_v1(): + global counter # Declares counter as global + counter = counter + 1 # Successfully updates the counter + + +def update_counter_v2(counter): + return counter + 1 # Relies on a local name diff --git a/python-scope-legb-rule/dispatch.py b/python-scope-legb-rule/dispatch.py new file mode 100644 index 0000000000..3106364bc6 --- /dev/null +++ b/python-scope-legb-rule/dispatch.py @@ -0,0 +1,18 @@ +from sys import platform + + +def linux_print(): + print("Printing from Linux...") + + +def win32_print(): + print("Printing from Windows...") + + +def darwin_print(): + print("Printing from macOS...") + + +printer = globals()[platform + "_print"] + +printer() diff --git a/python-scope-legb-rule/exception_variable.py b/python-scope-legb-rule/exception_variable.py new file mode 100644 index 0000000000..c379fdf1c3 --- /dev/null +++ b/python-scope-legb-rule/exception_variable.py @@ -0,0 +1,11 @@ +numbers = [1, 2, 3] + +try: + numbers[4] +except IndexError as error: + # The variable error is local to this block + exception = error + error + + +print(exception) diff --git a/python-scope-legb-rule/lazy_global.py b/python-scope-legb-rule/lazy_global.py new file mode 100644 index 0000000000..c0c89905a1 --- /dev/null +++ b/python-scope-legb-rule/lazy_global.py @@ -0,0 +1,8 @@ +def create_lazy_name(): + global number # Create a global name lazily + number = 42 + return number + + +create_lazy_name() +print(number) diff --git a/python-scope-legb-rule/nested_function.py b/python-scope-legb-rule/nested_function.py new file mode 100644 index 0000000000..2418a3508f --- /dev/null +++ b/python-scope-legb-rule/nested_function.py @@ -0,0 +1,11 @@ +def outer_func(): + variable = 100 + + def inner_func(): + print(f"Printing variable from inner_func(): {variable}") + + inner_func() + print(f"Printing variable from outer_func(): {variable}") + + +outer_func() diff --git a/python-scope-legb-rule/power_factory.py b/python-scope-legb-rule/power_factory.py new file mode 100644 index 0000000000..da6da86817 --- /dev/null +++ b/python-scope-legb-rule/power_factory.py @@ -0,0 +1,12 @@ +def power_factory(exponent): + def power(base): + return base**exponent + + return power + + +square = power_factory(2) +print(square(10)) + +cube = power_factory(3) +print(cube(10))