Re: Imports in python are static, any solution?

2009-04-16 Thread Ravi
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?

2009-04-13 Thread Ravi
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?

2009-04-13 Thread Luis Alberto Zarrabeitia Gomez

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?

2009-04-13 Thread David Stanek
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?

2009-04-13 Thread AJ Mayorga
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?

2009-04-13 Thread norseman

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