1

So I have a lot of functions in a file called definitions.py

My main file main.py which accesses those definitions and also has functions of its own using those functions.

Now in main.py I have 'from definitions import *'

Both files rely on a set of 15 initial variables, these variables I have placed in definitions.py, this is all well and good I have all my functions working fine, the problem arises when I want to use my application as a model, where I will want to change some of the variables to see how the output differs.

Essentially I want my initial variables to be in a sort of bowl which is accessed each time a function is called and I can swap and change the values in this bowl which means the next function that is called uses the updated variables.

The problem I'm having at the moment is, I think, because the variables are written in definitions.py that's that and I can't change them.

Even in python shell I can put n1 equal to something else, execute a function that uses n1 but it will use the old n1, not the new one, I think because the variables haven't changed in the definition.py file.

Is there some sort of way to have live access variables that I don't know about? Thank you.

1 Answer 1

3

You should use a class. For example, if your definitions.py file has:

variable1 = 3
variable2 = 'stuff'

def spam(arg1):
    return 'spam' + arg1

def eggs(arg1,arg2):
    return 'eggs' + arg1 + arg2

change it to

class Definitions():
    def __init__():
        self.variable1 = 3
        self.variable2 = 'stuff'

    def spam(self,arg1):
        return 'spam' + arg1

    def eggs(self,arg1,arg2):
        return 'eggs' + arg1 + arg2

Now, from your main.py file, you can import in a slightly different way and sweep multiple parameter values:

import definitions

for parameter in xrange(0,10):
    defs = definitions.Definitions()
    defs.variable1 = parameter

    # do some stuff and store the result

# compare the various results

Remember that now your functions are inside a class, so instead of calling spam('mail'), you should call defs.spam('mail'), and so on.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, using previous code I should be able to export and import the variables using a text file and in each 'main.py' definition tell the class to use the variables from this text file.
I forgot to add "self" as the first argument in all class functions, which is required for things to work. I corrected my original answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.