[Tutor] Globals?
orbitz
orbitz at ezabel.com
Sat Nov 13 20:07:07 CET 2004
In my opinion, this behavior really sucks too. Like when it comes to
closures. As far as I know, Python does not *really* support closures,
like you would get with something like lisp. Correct me if I'm wrong.
This means code like:
def fn(x):
def _():
x += 1
return x
return _
Will not work, which can be a pain in the ass.
Kent Johnson wrote:
> Liam,
>
> When you make any assignment to a variable inside a function, Python
> assumes that the variable is local to the function. Then any use of
> the variable before it's first assignment is an error.
>
> To force a variable in a function to be global, put a 'global'
> statement in the function. You need to add
> global badConnectCycle
> to your function getReturns
>
> If you don't make any assignment to a variable, then the global
> (module) namespace is searched. That is why badUserList works fine -
> you never assign it, you just access the list methods.
>
> Kent
>
> Liam Clarke wrote:
>
>> Hi all,
>> Having trouble with something, it is 3:30am in the morning, so this
>> may be a dumb problem, if so, I apologise.
>>
>> In my prog, there's two variables created right at the get go -
>>
>> import imaplib
>> import email.Parser
>> import os
>> import os.path
>> import datetime
>> import md5
>> from pause import *
>>
>> badUserList=[]
>> badConnectCycle=0
>>
>> as I want them to be global within this module, so that another module
>> can pick them out easily.
>>
>> Now, I just added badConnectCycle, badUserList has been there awhile,
>> and it's used in
>>
>> the function connectToImap which is called by getReturns which is
>> called by main(), and my other module can get it no problem, so
>> badUserList is fine.
>>
>> badConnectCycle... is giving me errors -
>>
>> badConnectCycle is used in getReturns, as so -
>> if session == "NoConnect" : badConnectCycle += 1
>> continue
>>
>>
>> function getReturns ends as follows -
>> if badConnectCycle == len(user) and badConnectCycle > 0: return
>> ("NoConnect","")
>> if badUserList and not sender: return ('NoLogin',"")
>> if matchindex[0] and not sender: return ('NoNew', '')
>> if not sender: return ("NoMatch","")
>> return (sender, msgdata)
>>
>> and it's at that line
>>
>> if badConnectCycle == len(user) and badConnectCycle > 0:
>>
>> that I get this error:
>>
>> UnboundLocalError: local variable 'badConnectCycle' referenced before
>> assignment.
>>
>> Which is confusing me because badUserList is used within a function
>> called by getReturns, and I've had no problem with it.
>>
>> Help anyone? Much appreciated if you can.
>>
>> Regards,
>>
>> Liam Clarke
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
More information about the Tutor
mailing list