Search code examples
pythonpython-3.xfunctionif-statementglobal-variables

How to avoid using global variables?


I use global variables but I've read that they aren't a good practice or pythonic. I often use functions that give as a result many yes/no variables that I need to use in the main function. For example, how can I write the following code without using global variables?

def secondary_function():
    global alfa_is_higher_than_12
    global beta_is_higher_than_12

    alfa = 12
    beta = 5

    if alfa > 10:
        alfa_is_higher_than_12 = "yes"
    else:
        alfa_is_higher_than_12 = "no"

    if beta > 10:
        beta_is_higher_than_12 = "yes"
    else:
        beta_is_higher_than_12 = "no"

def main_function():
    global alfa_is_higher_than_12
    global beta_is_higher_than_12

    secondary_function()

    if alfa_is_higher_than_12=="yes":
        print("alfa is higher than 12")
    else:
        print("alfa isn't higher than 12")

    if beta_is_higher_than_12=="yes":
        print("beta is higher than 12")
    else:
        print("beta isn't higher thant 12")

main_function()

Solution

  • One could ask what reasons you might have to structure your code like this, but assuming you have your reasons, you could just return the values from your secondary function:

    def secondary_function():
    
      alfa = 12
      beta = 5
    
      if alfa > 10:
          alfa_is_higher_than_12 = "yes"
      else:
          alfa_is_higher_than_12 = "no"
    
      if beta > 10:
          beta_is_higher_than_12 = "yes"
      else:
          beta_is_higher_than_12 = "no"
    
      return alfa_is_higher_than_12, beta_is_higher_than_12
    
    
    def main_function():
    
      alfa_is_higher_than_12, beta_is_higher_than_12 = secondary_function()
    
      if alfa_is_higher_than_12=="yes":
          print("alfa is higher than 12")
      else:
          print("alfa isn't higher than 12")
    
      if beta_is_higher_than_12=="yes":
          print("beta is higher than 12")
      else:
          print("beta isn't higher thant 12")