passing global data to a function

David MacQuigg dmq at gain.com
Mon Dec 1 21:05:51 EST 2003


On 1 Dec 2003 08:55:38 -0800, beliavsky at aol.com wrote:

>How can I pass global data to function stored in a separate file? 
>For example, in file "funk.py" is the code 
>
>ipow = 2
>def xpow(xx): return xx**ipow
>
>and in "xfunk.py" is the code
>
>from funk import xpow,ipow
>xx = 4.0
>print xpow(xx)
>ipow = 3
>print xpow(xx)
>
>Running Python against xfunk.py, I get the output
>
>16.0
>16.0, 
>
>so the value of ipow in function xpow is not being changed. I want ipow to equal
>4 in the 2nd call to xpow, so that the output would be 
>
>16.0
>64.0

I found the scoping rules confusing also.  In case anyone is writing a
text, here is a simpler example:

def fonc(): return p
# from funk import fonc  # same def, but in module funk.py
# import funk
p = 2; print fonc()
p = 3; print fonc()
### RESULTS from uncommenting line #N, where #N =
#1)  As expected.
#2)  'p' is not defined.
#3)  'fonc' is not defined

The variable 'p' trickles down ONLY to definitions within the same
module.  ( "Lexical scoping", as explained by Terry Reedy. )  I'm not
sure why this is the right thing to do, but after a few months of
working with Python, my confidence is still growing that the designers
made the right choices.  This is a superb language!!  Perfect for a
technical professional like myself who is not a programmer.

Anyway, I have no complaint about this limitation.  I agree with Bengt
Richter, this "back door" is not a good way to pass parameters into a
function.

Now if only we could simplify the scoping rules by having global
definitions pass down through nested classes the same as they do
through nested functions ... :>)

-- Dave






More information about the Python-list mailing list