Re: Imports in python are static, any solution?
On Apr 14, 1:23 am, norseman norse...@hughes.net wrote: AJ Mayorga wrote: For something like this I generally create a superclass to hold configuration variables that will change overtime, doing that will save you from insanity. Class configVar: #set initial values Def __init__(self): Self.A = 5 Self.B = 10 Self.C = 20 Class myMath(configVars): def __init__(self): pass def SubAandB(self): return self.A - self.B def AddCandB(self): return self.C + self.B def MultiplyXbyA(self, x): return self.A * x m = myMath() X = m.SubAandB() Y = m.AddCandB() Z = m.MultiplyXbyA(32) Keeps your vars in a safer easier to handle, debug, and change kinda way Good luck AJ -Original Message- From: python-list-bounces+aj=xernova@python.org [mailto:python-list-bounces+aj=xernova@python.org] On Behalf Of David Stanek Sent: Monday, April 13, 2009 12:12 PM To: Ravi Cc: python-l...@python.org Subject: Re: Imports in python are static, any solution? On Mon, Apr 13, 2009 at 11:59 AM, Ravi ra.ravi@gmail.com wrote: foo.py : i = 10 def fi(): global i i = 99 bar.py : import foo from foo import i print i, foo.i foo.fi() print i, foo.i This is problematic. Well I want i to change with foo.fi() . Why not only import foo and using foo.i? In fi() when you set i = 99 you are creating a new object called i in foo's namespace. === Aj is right. In foo.py there are two definitions for 'i'. The initial and the replacement initiated by fi(). While initially there is no 'i' definition in bar itself. To test, use my changes to bar.py import foo #from foo import i i= foo.i print i, foo.i x= foo.fi() print i, x, foo.i x= foo.i print i, x, foo.i the output will be: 10 10 10 None 99 10 99 99 output is same if you uncomment #from... and comment i=... The '...import i' creates the same var as the i=... in the current run If you comment out both the from and the i= then the print i will fail because i has not been defined in current space. foo.fi() returns None (nothing) per it's definition. whereas the first foo.i returns the initial i value and the foo.i after foo.fi() returns the 2nd value, foo's i reset to 99 by fi() inside foo. Clear as Mud??? Steve Yes I find the difference. Thank you all. -- http://mail.python.org/mailman/listinfo/python-list
Imports in python are static, any solution?
foo.py : i = 10 def fi(): global i i = 99 bar.py : import foo from foo import i print i, foo.i foo.fi() print i, foo.i This is problematic. Well I want i to change with foo.fi() . -- http://mail.python.org/mailman/listinfo/python-list
Re: Imports in python are static, any solution?
Quoting Ravi ra.ravi@gmail.com: This is problematic. Well I want i to change with foo.fi() . You can't. i and foo.i are _different_ variables that just happen to share the same value initially. What you are observing is no different than i = 10 j = i i = 99 print i # prints 99 print j # print 10 May I ask, why is it problematic? You should be avoiding the use of global variables anyway. -- Luis Zarrabeitia Facultad de Matemática y Computación, UH http://profesores.matcom.uh.cu/~kyrie -- Participe en Universidad 2010, del 8 al 12 de febrero de 2010 La Habana, Cuba http://www.universidad2010.cu -- http://mail.python.org/mailman/listinfo/python-list
Re: Imports in python are static, any solution?
On Mon, Apr 13, 2009 at 11:59 AM, Ravi ra.ravi@gmail.com wrote: foo.py : i = 10 def fi(): global i i = 99 bar.py : import foo from foo import i print i, foo.i foo.fi() print i, foo.i This is problematic. Well I want i to change with foo.fi() . Why not only import foo and using foo.i? In fi() when you set i = 99 you are creating a new object called i in foo's namespace. -- David blog: http://www.traceback.org twitter: http://twitter.com/dstanek -- http://mail.python.org/mailman/listinfo/python-list
RE: Imports in python are static, any solution?
For something like this I generally create a superclass to hold configuration variables that will change overtime, doing that will save you from insanity. Class configVar: #set initial values Def __init__(self): Self.A = 5 Self.B = 10 Self.C = 20 Class myMath(configVars): def __init__(self): pass def SubAandB(self): return self.A - self.B def AddCandB(self): return self.C + self.B def MultiplyXbyA(self, x): return self.A * x m = myMath() X = m.SubAandB() Y = m.AddCandB() Z = m.MultiplyXbyA(32) Keeps your vars in a safer easier to handle, debug, and change kinda way Good luck AJ -Original Message- From: python-list-bounces+aj=xernova@python.org [mailto:python-list-bounces+aj=xernova@python.org] On Behalf Of David Stanek Sent: Monday, April 13, 2009 12:12 PM To: Ravi Cc: python-list@python.org Subject: Re: Imports in python are static, any solution? On Mon, Apr 13, 2009 at 11:59 AM, Ravi ra.ravi@gmail.com wrote: foo.py : i = 10 def fi(): global i i = 99 bar.py : import foo from foo import i print i, foo.i foo.fi() print i, foo.i This is problematic. Well I want i to change with foo.fi() . Why not only import foo and using foo.i? In fi() when you set i = 99 you are creating a new object called i in foo's namespace. -- David blog: http://www.traceback.org twitter: http://twitter.com/dstanek -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list
Re: Imports in python are static, any solution?
AJ Mayorga wrote: For something like this I generally create a superclass to hold configuration variables that will change overtime, doing that will save you from insanity. Class configVar: #set initial values Def __init__(self): Self.A = 5 Self.B = 10 Self.C = 20 Class myMath(configVars): def __init__(self): pass def SubAandB(self): return self.A - self.B def AddCandB(self): return self.C + self.B def MultiplyXbyA(self, x): return self.A * x m = myMath() X = m.SubAandB() Y = m.AddCandB() Z = m.MultiplyXbyA(32) Keeps your vars in a safer easier to handle, debug, and change kinda way Good luck AJ -Original Message- From: python-list-bounces+aj=xernova@python.org [mailto:python-list-bounces+aj=xernova@python.org] On Behalf Of David Stanek Sent: Monday, April 13, 2009 12:12 PM To: Ravi Cc: python-list@python.org Subject: Re: Imports in python are static, any solution? On Mon, Apr 13, 2009 at 11:59 AM, Ravi ra.ravi@gmail.com wrote: foo.py : i = 10 def fi(): global i i = 99 bar.py : import foo from foo import i print i, foo.i foo.fi() print i, foo.i This is problematic. Well I want i to change with foo.fi() . Why not only import foo and using foo.i? In fi() when you set i = 99 you are creating a new object called i in foo's namespace. === Aj is right. In foo.py there are two definitions for 'i'. The initial and the replacement initiated by fi(). While initially there is no 'i' definition in bar itself. To test, use my changes to bar.py import foo #from foo import i i= foo.i print i, foo.i x= foo.fi() print i, x, foo.i x= foo.i print i, x, foo.i the output will be: 10 10 10 None 99 10 99 99 output is same if you uncomment #from... and comment i=... The '...import i' creates the same var as the i=... in the current run If you comment out both the from and the i= then the print i will fail because i has not been defined in current space. foo.fi() returns None (nothing) per it's definition. whereas the first foo.i returns the initial i value and the foo.i after foo.fi() returns the 2nd value, foo's i reset to 99 by fi() inside foo. Clear as Mud??? Steve -- http://mail.python.org/mailman/listinfo/python-list