Q:

Same list/dictionary in multiple functions

I'm new to python and still currently learning hwo to deal with lists and dictionaries. 
I have these two functions
    def food_database(item_name, size_serv, calorie_serv, protein_serv, carb_serv, fat_serv):
      # used to list the different foods when users ask for it
      # food database
      food_dict = [ {
        'food_name': item_name,
        'serving_size': size_serv,
        'serving_calorie': calorie_serv,
        'serving_protien': protein_serv,
        'serving_fat': fat_serv,
        'serving_carb': carb_serv
        } ]
      print food_dict

    def food_in_diet(item_name, size_serv, calorie_serv, protein_serv, carb_serv, fat_serv, num_serv):
        # used to show how much is in the diet plan for the user
      User_diet_dict = [ {
        'food_name': item_name,
        'amount': num_serv*size_serv,
        'serving_calorie': num_serv*calorie_serv,
        'serving_protien': protein_serv,
        'serving_fat': fat_serv,
        'serving_carb': carb_serv
        } ]
      print User_diet_dict

I have this other function
    def add_food():
      ask_to_add_another = raw_input("Would you like to add another food?(y/n)")
      if ask_to_add_another == 'y':
        # update
        item_name = raw_input("What is the name of the food you would like to add? ")
        size_serv = input("What is the size(grams) in each serving of %s? " % item_name)
        calorie_serv = input("How many calories is in each serving of %s? " % item_name)
        protein_serv = input("How many grams of protein is in each serving of %s? " % item_name)
        carb_serv = input("How many grams of carbohydrates is in each serving of %s? " % item_name)
       fat_serv = input("How many grams of fat is in each serving of %s? " % item_name)
        num_serv = input("How many servings of %s would you like to add? " % item_name)

        food_dict.append( {
          'food_name': 'item_name',
          'serving_size': size_serv,
          'serving_calorie': calorie_serv,
          'serving_protien': protein_serv,
          'serving_fat': fat_erv,
          'serving_carb': carb_serv
        } )

    #    User_diet_dict.append = ( {
    #      'food_name': item_name,
    #      'amount': num_serv*size_serv,
    #      'serving_calorie': num_serv*calorie_serv,
    #      'serving_protien': protein_serv,
    #      'serving_fat': fat_serv,
    #      'serving_carb': carb_serv
    #    } )
        # add to the dictonary/list
        print food_dict
        add_food()
      if ask_to_add_another == 'n':
        return False

The add_food() function updates the food_dict dictionary and adds to the list. 
I get the error
    Traceback (most recent call last):
      File "MACROCALC.py", line 156, in <module>
        main()
      File "MACROCALC.py", line 35, in main
        add_food()
      File "MACROCALC.py", line 130, in add_food
        food_dict.append( {
    NameError: global name 'food_dict' is not defined

I feel as though because the dictionaries are not global that this is occurring. 
Here is my code if anyone is curious -->  http://pastebin.com/mc8S6fkS
Open to suggestions! Noob programmer looking to getting better!
Appreciate your help!

A:

Declare food_dict as global at the top of each function that will mutate that list. For a list mutate is basically assign, not usage of append(). Generally, using a class's methods does not constitute mutation in the sense I'm describing above.  See below:
def init():
    global food_dict
     # assignment is manipulation
    food_dict = [{'name': 'apple'}, {'name': 'orange'}]

def next():
    # notice no 'global' usage but this still works
    food_dict.append({'name': 'kiwi'})

def lastly():
    global food_dict
    # assign to empty list
    food_dict = [{}]

>>> init()
>>> print food_dict
[{'name': 'apple'}, {'name': 'orange'}]
>>> next()
>>> print food_dict
[{'name': 'apple'}, {'name': 'orange'}, {'name': 'kiwi'}]
>>> lastly()
>>> print food_dict
[{}]

