正如其他人所指出的,问题在于您正在修改一个在函数之外不可用的变量。
一种解决方案是声明 foodList global:
def newfood(food, caloric):
global foodList
foodList = []
newFoodList = ({food:caloric})
foodList.append(newFoodList)
print(foodList)
newfood('apple', 100)
另一种方法是在函数外部声明 foodList,但这是一种冒险的做法:根据您编写代码的方式,您最终可能会“屏蔽”全局变量。
foodList = []
def newfood(food, caloric):
newFoodList = ({food:caloric})
foodList.append(newFoodList)
print(foodList)
newfood('apple', 100)
最好的解决方案可能是让函数返回你所追求的,或者编写它以便修改给定的列表:
def newfood(foodList, afood, acaloric):
return foodList + [{afood:acaloric}]
foodList = []
foodList = newfood(foodList, 'apple', 100)
print(foodList)
或者:
def newfood(afoodlist, afood, acaloric):
foodList.append({afood:acaloric})
foodList = []
newfood(foodList, 'apple', 100)
print(foodList)
或者,考虑到你在做什么,把整个事情写成一个类:
class FoodList(list):
def add(self, food, caloric):
self.append({food:caloric})
foodList = FoodList()
foodList.add('apple', 100)
print(foodList)
注意:您将 newFoodList 创建为 ({food:caloric}) - 但是,这实际上只是一个 dict 字典,在这种情况下括号不会做任何事情。此处显示的替代方案也是如此,但您似乎并不真正在寻找字典列表,因此您可能应该重新考虑您的数据结构。