多个函数中的相同列表/字典

时间:2013-06-22 01:56:46

标签: python python-2.7

我是python的新手,目前仍在学习hwo来处理列表和词典。

我有这两个功能

    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

我有其他功能

    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

add_food()函数更新food_dict字典并添加到列表中。

我收到错误

    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

我觉得好像因为字典不是全球性的。

如果有人好奇,这是我的代码 - &gt; http://pastebin.com/mc8S6fkS

公开建议! Noob程序员希望变得更好!

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在每个子程序中添加以下内容 -

global food_dict

答案 1 :(得分:1)

在每个将改变该列表的函数的顶部将food_dict声明为global。对于list mutate,基本上是分配,而不是append()的使用。一般来说,使用类的方法并不构成我在上面描述的意义上的突变。见下文:

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
[{}]