Python Forum
Function Recognises Variable Without Arguments Or Global Variable Calling.
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Function Recognises Variable Without Arguments Or Global Variable Calling.
#1
Hi all,

I am struggling to understand why this code runs correctly and I can't seem to find an answer online.

a = 10
b = 5

def function():
    new_local_variable = a
    other_local_variable = new_local_variable * b
    print(other_local_variable)

function()
In the video I watched it runs correctly (prints 'other local variable') and uses the global value of 'a' inside the function without input arguments in the function definition OR calling the global variable 'a' into the function.

1) does python search for global value (and use them) by default if local not found? (or does it only do this if the input args are empty?

2) why if you use a while loop like below, do I get the error of not finding the global variable, but don't get that error for finding a,b etc.?
ERROR: "UnboundLocalError: local variable 'is_true' referenced before assignment" :


a = 10
b = 5
is_true = True

def function():
    iter = 0
    while is_true:
        new_local_variable = a
        other_local_variable = new_local_variable * b
        print(other_local_variable)
        
        iter += 1
        
        if iter == 20:
            is_true = False
function()
Am I being really dumb?

Thanks so much in advance.
Reply
#2
(Apr-06-2020, 08:44 AM)OJGeorge4 Wrote: 1) does python search for global value (and use them) by default if local not found? (or does it only do this if the input args are empty?

The first. It will use a variable from a larger scope (such as global) if there isn't a local binding variable. The follow-on is that there is no local binding variable if it is not assigned (written to) within the function.

Compare:

a = 10

def function():
    print(a)

function()
and

a = 10

def function():
    print(a)
    a = 1

function()
Because a is assigned at some point in the second function, it is a local variable.

Quote:2) why if you use a while loop like below, do I get the error of not finding the global variable, but don't get that error for finding a,b etc.?

Because a and b were never assigned in the function, but is_true is assigned within.

From Python Docs
Quote:If a name binding operation occurs anywhere within a code block, all uses of the name within the block are treated as references to the current block. This can lead to errors when a name is used within a block before it is bound. This rule is subtle. Python lacks declarations and allows name binding operations to occur anywhere within a code block. The local variables of a code block can be determined by scanning the entire text of the block for name binding operations.

The global and nonlocal statements can override this behavior.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
Question Variable not defined even though it is CoderMerv 3 70 1 hour ago
Last Post: Larz60+
  optimum chess endgame with D=3 pieces doesn't give an exact moves_to_mate variable max22 1 187 Mar-21-2024, 09:31 PM
Last Post: max22
  unbounded variable akbarza 3 426 Feb-07-2024, 03:51 PM
Last Post: deanhystad
  Variable for the value element in the index function?? Learner1 8 545 Jan-20-2024, 09:20 PM
Last Post: Learner1
  Variable definitions inside loop / could be better? gugarciap 2 373 Jan-09-2024, 11:11 PM
Last Post: deanhystad
  working directory if using windows path-variable chitarup 2 680 Nov-28-2023, 11:36 PM
Last Post: chitarup
  Variable is not defined error when trying to use my custom function code fnafgamer239 4 511 Nov-23-2023, 02:53 PM
Last Post: rob101
  How to create a variable only for use inside the scope of a while loop? Radical 10 1,523 Nov-07-2023, 09:49 AM
Last Post: buran
  Calling functions by making part of their name with variable crouzilles 4 746 Nov-02-2023, 12:25 PM
Last Post: noisefloor
  dynamic variable name declaration in OOP style project problem jacksfrustration 3 717 Oct-22-2023, 10:05 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020