No subject

aking at mappi.helsinki.fi aking at mappi.helsinki.fi
Tue Oct 31 07:23:55 CET 2006


J. Clifford Dyer wrote:
> Alistair King wrote:
>   
>> Hi,
>>
>> is there a simple way of creating global variables within a function?
>>
>> ive tried simply adding the variables in:
>>
>> def function(atom, Xaa, Xab):
>>     Xaa = onefunction(atom)
>>     Xab = anotherfunction(atom)
>>
>> if i can give something like:
>>
>> function('C')    #where atom = 'C' but not necessarly include Xaa or Xab
>>
>> i would like to recieve:
>>
>> Caa = a float
>> Cab = another float
>>
>> ive tried predefining Xaa and Xab before the function but they are
>> global values and wont change within my function. Is there a simple way
>> round this, even if i call the function with the variables ('C', Caa, Cab)?
>>
...............................................................................................................................
>>
>> some actual code:
>>
>> # sample dictionaries
>> DS1v = {'C': 6}
>> pt = {'C': 12.0107}
>>
>> def monoVarcalc(atom):
>>     a = atom + 'aa'
>>     Xaa = a.strip('\'')
>>     m = atom + 'ma'
>>     Xma = m.strip('\'')
>>     Xaa = DS1v.get(atom)
>>     Xma = pt.get(atom)
>>     print Xma
>>     print Xaa
>>
>> monoVarcalc('C')
>>
>> print Caa
>> print Cma
>>
...............................................................................................................................
>> it seems to work but again i can only print the values of Xma and Xaa
>>
>> ?
>>
>> Alistair
>>
>>     
>
> I suspect you are misusing the concept of a function.  In most basic 
> cases, and I suspect your case applies just as well as most, a function 
> should take arguments and return results, with no other communication 
> between the calling code and the function itself.  When you are inside 
> your function don't worry about the names of the variables outside.  I'm 
> not sure exactly where your floats are coming from, but try something 
> like this:
>
>  >>> def monoVarCalc(relevant_data):
> ...     float1 = relevant_data * 42.0
> ...     float2 = relevant_data / 23.0
> ...     return float1, float2
>
>  >>> C = 2001
>  >>> Caa, Cab = monoVarCalc(C)
>  >>> Caa
> 84042.0
>  >>> Cab
> 87.0
>
> Notice that you don't need to use the variable C (or much less the 
> string "C", inside monoVarCalc at all.  It gets bound to the name 
> relevant_data instead.
>
> Also, if you are going to have a lot of these little results lying 
> around, (Cab, Cac ... Czy, Czz), you might consider making them a list 
> or a dictionary instead.  I won't tell you how to do that, though.  The 
> online tutorial has plenty of information on that.
>
> http://docs.python.org/tut/tut.html
>
>
> Cheers,
> Cliff
>   
this worked a treat:

def monoVarcalc(atom):

   a = atom + 'aa'
   Xaa = a.strip('\'')
   m = atom + 'ma'
   Xma = m.strip('\'')
   Xaa = DS1v.get(atom)
   Xma = pt.get(atom)
   return Xaa, Xma


Caa, Cma = monoVarcalc('C')


thanks

Ali

-- 
Dr. Alistair King
Research Chemist,
Laboratory of Organic Chemistry,
Department of Chemistry,
Faculty of Science
P.O. Box 55 (A.I. Virtasen aukio 1)
FIN-00014 University of Helsinki
Tel. +358 9 191 50392, Mobile +358 (0)50 5279446
Fax +358 9 191 50366







More information about the Python-list mailing list