Non-local references in procedures, Python Programming

Assignment Help:

Non-local references in procedures

There  is an important subtlety in the  way  names  are handled in the  environment created by a function call. When  a value  that  is not related in the local environment is referenced, then  it is create up in the chain of base environments. So, as we have look, it is ?ne to have

 

a = 2

def b():

return a

 

When  a name  is assigned inside  a method, a new  relation is created for it in the environment associated with the current call of that method. So, it is ?ne to have

 

a = 2

def b():

a = 3

c = 4

return a + c

 

Both assignments cause  new bindings to be made  in the local variables, and  it is those  bind­ ings  that  are used  to supply values  in the return statement. It will not modify  a in the global environment.

 

But here is a program fragment that gives trouble:

 

a = 3

def b():

a = a + 1

print a

 

It seems  completely understandable, and  you might  expect b() to return 4. But, instead, it produces an error.  What  is going  on??  It each one has to do with  when  Python decides to add  a binding to the local function. When it takes this method de?nition, it sees that  the name  a occurs  on the left-hand-side of an assignment expression, and so, at the very start, it gives a new entry for a in the local variables, but without any number  related to it. Now,  when  it is time to compute the statement

 

a = a + 1

 

Python starts by evaluating the expression on the right hand side: a + 1. When it tries to look up the name  a in the procedure-call environment, it search that a has been included to the environment, but has not yet had a number  given. So it gives an error.

 

In Python, we can write  code to increment a number named in the global variable, by using the global declaration:

a = 3

def b():

global a

a = a + 1

print a

>>> b()

4

>>> b()

5

>>> a

5

 

The statement global a asks that  a new  binding for a not  be made  in the procedure-call environment.  Now,  all instances to a are to the related in the module's environment, and  so this procedure actually modifies a.

 

In Python, we can only make  assignments to names  in the procedure call environment or to the module variable, but not to names  in intermediate variables. So,

 

def outer():

def inner():

a = a + 1

a = 0

inner()

 

In this example, we get a exception, because Python has build a new binding for a in the environment for the invoke to inner.  We could really like inner to be able to see and modify the a that belongs to the scope for outer,  but  there  is no way  to manage this.   Some  other  programming languages, such as procedure,  offer more  flexible grained control  over how  the scoping of variables is handled.

 


Related Discussions:- Non-local references in procedures

Expressions and assignment, Expressions and assignment We can think of...

Expressions and assignment We can think of most computer programs as performing some sort of transformation on data.  Our code may get as input the exam scores of everyone in

Python programs, Python programs Every  general-purpose computer has a...

Python programs Every  general-purpose computer has a various detailed design, which  defines  that  the way  its program requires  to be specified is different. The "machine

List comprehensions, List Comprehensions   Python has a very nice b...

List Comprehensions   Python has a very nice built-in  facility for doing  many  iterative methods, known as list comprehensions. The basic template is       [

Program in c to generate random input - python script, For this assignment,...

For this assignment, you are to: 1.    Modify the output format of your Python script from Assignment 1 to match the input format of your C program from Assignment 2. 2.    W

Normalize a vector, Normalize a vector Let's imagine we want  to norma...

Normalize a vector Let's imagine we want  to normalize a vector  of three  variables;  that  is to compute a new  vector  of three values,  such that its size  is 1. Here is o

Foundation of programming, hi i want to make a assignmnt of foundation of p...

hi i want to make a assignmnt of foundation of programming which include 4 task. I just want to know how much will be the price for that

Analytical models, Analytical models Analytical tools  are very importa...

Analytical models Analytical tools  are very important.  It may  be hard  to check  the  correctness of a machine by trying it in several possible  initial  conditions with  al

If statements, how do you make an if and else statment work in pytho?

how do you make an if and else statment work in pytho?

Example of Procedures as First-class objects, Procedures in Firrst-class ob...

Procedures in Firrst-class objects In Python, unlike  many  other  languages, methods are behave in much  the same way as num­ bers:  they  can be stored as values  of variabl

Procedure calls, Procedure calls When you compute an expression of the...

Procedure calls When you compute an expression of the form ( ,  ..., )   the Python interpreter treats  this as a procedure call. It will be simpler to talk about

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd