create global variables?

A

Alistair King

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

--
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
 
R

robert

Alistair said:
Hi,

is there a simple way of creating global variables within a function?

#module global:

def f(atom):
global a
a=1
globals()[atom+'var']=2

def f():
a=b=1
globals().update(locals())

_global=sys.modules[__name__]

def f(atom):
_global.a = 1
setattr(_global,atom+'var', 2)

# all/app global

import myglobals

def f(atom):
myglobals.a=1
setattr(myglobals....)


your example application seems to point towards 'odd' use of these techniques.


-robert
 
W

Wojciech =?iso-8859-2?Q?Mu=B3a?=

Alistair said:
is there a simple way of creating global variables within a function?

def foo(name):
globals()[name] = "xxx"
globals()[name + 'aa'] = "yyy"
globals()[name + 'ab'] = "zzz"
 
F

Fredrik Lundh

Wojciech said:
is there a simple way of creating global variables within a function?

def foo(name):
globals()[name] = "xxx"
globals()[name + 'aa'] = "yyy"
globals()[name + 'ab'] = "zzz"

that kind of coding is punishable by law in some jurisdictions.

</F>
 
J

J. Clifford Dyer

Alistair said:
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:
.... float1 = relevant_data * 42.0
.... float2 = relevant_data / 23.0
.... return float1, float2
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
 
S

Steve Holden

Wojciech said:
Alistair said:
is there a simple way of creating global variables within a function?


def foo(name):
globals()[name] = "xxx"
globals()[name + 'aa'] = "yyy"
globals()[name + 'ab'] = "zzz"

Please note that this is a terrible programming practice. Anyone who
really thinks they need to do this should be thinking hard about whether
they are using Python correctly (though tere are occasionaly
requirements where the feature can legitimately be used).

It would be *much* easier and *much* better programming practice to
modify your code so the function returns a two-element tuple, which you
then assign to two variables in an unpacking assignment.

regards
Steve
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top