> I've a question, essentially about the import statement. Suppose I have > two python files, a.py and b.py:
OK, I'll have a go although I'm only 90% sure I've got it right... > a.py > ---- > flag = True > > def getFlag(): > return flag > > b.py > ---- > from a import * This imports the names from a. Thus b now has a name flag that points to TRue and a name getFlag that points to the function in a. > now, in the interpreter: > >>>> import b >>>> b.flag > True >>>> b.flag=False >>>> b.flag > False This first reads the value imported from a then creates a new name in b that overwrites the imported value and sets it to False. >>>> b.getFlag() > True This calls the function in a which returns the value from a which is still set to True. > this is probably related to namespaces? I find it very confusing, It is to do with namespaces and shows why two bad practices you have used are indeed bad practices! :-) First if you had used import a in b instead of from a import * All would have worked as you expected because you would have been forced to specify b.a.flag etc. Secondly relying on a global variable in the function getFlag meant that when you imported getFLag the function object remained in a and accessed the variable flag in a. If you had passed the name of the flag to getFlag as a parameter then it would have worked as expected - although only returning the value you already had! (But if Flag were a more complex object it would then make sense!) So as usual the advice "do not use from X import *" holds. Alan G Author of the learn to program web tutor http://www.freenetpages.co.uk/hp/alan.gauld _______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
