469,646 Members | 1,201 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,646 developers. It's quick & easy.

scopes of local and global variable

#############################CODE################# #############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:

#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#

row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################## ###############

Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.
Dec 22 '06 #1
9 1529
Pyenos wrote:
#############################CODE################# #############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:

#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#

row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################## ###############
wow.
Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.
each function introduces a new scope.

</f>

Dec 23 '06 #2
Fredrik Lundh <fr*****@pythonware.comwrites:
Pyenos wrote:
#############################CODE################# #############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:
#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################## ###############

wow.
Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.

each function introduces a new scope.

</f>
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?

thanks.

Dec 23 '06 #3
Pyenos wrote:
Fredrik Lundh <fr*****@pythonware.comwrites:

>>Pyenos wrote:

>>>#############################CODE############## ################
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:
#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
############################################### ##################

wow.

>>>Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.

each function introduces a new scope.

</f>


does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?

thanks.
Yes and no, depending.

The rule of thumb I use is that if you assign in a function, the name is
not taken from the enclosing scope. For example, compare:

# example 1
def doit():
t_len = 42
def nested():
print t_len
nested()

doit() # will print 42
# example 2
def doit():
t_len = 42
def nested():
if t_len 0:
print t_len
else:
t_len = 1
nested()

doit() # will get "referenced before assignment" error
You could make use of your WORK class here, depending on whether t_len
makes sense as a member of the WORK class:
class WORK:
t_len = 0
def getwork(self):
def formattable(table_to_process,type):
# etc., etc.
WORK.t_len = len(str(col))

James
--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com/
Dec 23 '06 #4
James Stroud <js*****@mbi.ucla.eduwrites:
>>#############################CODE############### ###############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:
#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################ #################
based on your advice i will try to answer my own questions:
does class WORK inherit t_len=0 from line1?
yes.
does def getwork() inherit t_len=0 from line1?
no.
does def formattable(table_to_process,type) inherit t_len=0 from
line1?
no.
does def format_t() inherit t_len=0 from line1?
no.

thank you kindly.
Dec 23 '06 #5
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?
Not really, no. The global t_len is different than the local t_len--two
variables with the same name. You need to declare "global t_len" inside
your function so it knows that "t_len=..." is assigning to the old,
global variable instead of creating a new one.

See #6 here: http://zephyrfalcon.org/labs/python_pitfalls.html

-Max

Dec 23 '06 #6
"Max Wilson" <wi********@gmail.comwrites:
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?

Not really, no. The global t_len is different than the local t_len--two
variables with the same name. You need to declare "global t_len" inside
your function so it knows that "t_len=..." is assigning to the old,
global variable instead of creating a new one.

See #6 here: http://zephyrfalcon.org/labs/python_pitfalls.html

-Max
so, based on your advice, i think the answers are all no.
Dec 23 '06 #7
At Friday 22/12/2006 20:45, Pyenos wrote:
># Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
See item 6 in "10 Python pitfalls":
<http://zephyrfalcon.org/labs/python_pitfalls.html>
--
Gabriel Genellina
Softlab SRL


__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas

Dec 23 '06 #8
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?
you may want to read the documentation:

http://docs.python.org/ref/naming.html

</F>

Dec 23 '06 #9
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?
you may want to read the documentation:

http://docs.python.org/ref/naming.html

</F>

Dec 23 '06 #10

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Miki Tebeka | last post: by
2 posts views Thread by Fernando Rodriguez | last post: by
3 posts views Thread by Nils Grimsmo | last post: by
5 posts views Thread by Dave Benjamin | last post: by
46 posts views Thread by Albert | last post: by
37 posts views Thread by Tim N. van der Leeuw | last post: by
3 posts views Thread by giblfiz | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.