Search code examples
pythonfunctionvariables

How to use a variable defined inside one function from another function?


If I have this:

def oneFunction(lists):
    category=random.choice(list(lists.keys()))
    word=random.choice(lists[category])

def anotherFunction():
    for letter in word:              #problem is here
        print("_",end=" ")

I have previously defined lists, so oneFunction(lists) works perfectly.

My problem is calling word in line 6. I have tried to define word outside the first function with the same word=random.choice(lists[category]) definition, but that makes word always the same, even if I call oneFunction(lists).

I want to have a different word every time I call the first function and then the second.

Can I do this without defining that word outside the oneFunction(lists)?


Solution

  • One approach would be to make oneFunction return the word so that you can use oneFunction instead of word in anotherFunction :

    def oneFunction(lists):
        category = random.choice(list(lists.keys()))
        return random.choice(lists[category])
    
        
    def anotherFunction():
        for letter in oneFunction(lists):              
            print("_", end=" ")
    

    Another approach is making anotherFunction accept word as a parameter which you can pass from the result of calling oneFunction:

    def anotherFunction(words):
        for letter in words:              
            print("_", end=" ")
    anotherFunction(oneFunction(lists))
    

    And finally, you could define both of your functions in a class, and make word a member:

    class Spam:
        def oneFunction(self, lists):
            category=random.choice(list(lists.keys()))
            self.word=random.choice(lists[category])
    
        def anotherFunction(self):
            for letter in self.word:              
                print("_", end=" ")
    

    Once you make a class, you have to instantiate an instance and access the member functions:

    s = Spam()
    s.oneFunction(lists)
    s.anotherFunction()