python中的函数和全局范围/嵌套函数混淆

时间:2016-12-10 19:44:04

标签: python function dictionary scope global

fridge={"cheese":10, "milk":11, "feta":12, "cream":21, "onion":32, "pepper":25} 
def fridge_function (fridge):
    del fridge["feta"]

    return

print (fridge)

我很困惑。

1)我认为这本词典具有全球范围。

2)我想要做的是从字典中删除项目,然后根据需要更新修改后的字典,即删除值“feta”。

3)当我打印冰箱时,我会在未经编辑的版本中获得原始列表。我甚至尝试制作冰箱的副本,然后尝试在功能之外打印该值,但最终结果是相同的:原始冰箱字典没有修改。

3 个答案:

答案 0 :(得分:3)

您还没有使用冰箱

调用函数 fridge_function

这应该有效:

fridge_function(fridge)
print (fridge)

答案 1 :(得分:2)

如需进一步说明,请注意以下任何一种方法都有效:

使用/src/frontend/app/partials/作为函数参数:

fridge

fridge={"cheese":10, "milk":11, "feta":12, "cream":21, "onion":32, "pepper":25} def fridge_function(fridge): del fridge["feta"] # reference to fridge passed as a parameter fridge_function(fridge) print(fridge) 作为全局变量

fridge

在大多数情况下,第一种被认为是更好的编程风格,如global variables are usually best avoided

答案 2 :(得分:1)

你将fridge作为参数传递,因此它将成为一个局部变量。要使用全局fridge,您可以执行以下操作:

FRIDGE = {"cheese": 10, "milk": 11, "feta": 12, "cream": 21, "onion": 32, "pepper": 25}

def fridge_function():
    del FRIDGE["feta"]

fridge_function()   # you need to call it
print(FRIDGE)

全局变量通常是大写的,所以我调用了变量FRIDGE

如果您需要分配给全局变量(并且只有这样),您需要添加global语句:

def myfunction():
    global MYGLOBAL
    MYGLOBAL = 42

使用全局变量和变换全局变量的函数通常不是一个好的解决方案。也许面向对象的东西会更好? (Python 2.7语法):

class Fridge(dict):
    def __init__(self, **contents):
        super(Fridge, self).__init__(contents)

def main():
    fridge = Fridge(
        cheese=10,
        milk=11,
        feta=12,
        cream=21,
        onion=32,
        pepper=25
    )
    print fridge
    del fridge['feta']
    print fridge

if __name__ == "__main__":
    main()

输出

{'cheese': 10, 'pepper': 25, 'feta': 12, 'onion': 32, 'milk': 11, 'cream': 21}
{'cheese': 10, 'pepper': 25, 'onion': 32, 'milk': 11, 'cream': 21}