如何在Python中维护函数调用之间的列表和词典?

use*_*646 4 python variables function-calls

我有一个功能.在里面,我正在维护一本价值字典.我希望在不同的函数调用之间维护该字典

假设dic是:

a = {'a':1,'b':2,'c':3}
Run Code Online (Sandbox Code Playgroud)

在第一次打电话时,我说,我将[a]更改为100 Dict变为 a = {'a':100,'b':2,'c':3}

在另一个电话中,我将[b]改为200,我想要那个 a = {'a':100,'b':200,'c':3}

但在我的代码中,[a]不会保留100.它会更改为初始值1.

我需要尽快回答......我已经迟到了......请帮帮我朋友们......

S.L*_*ott 17

你可能在谈论一个可调用的对象.

class MyFunction( object ):
    def __init__( self ):
        self.rememberThis= dict()
    def __call__( self, arg1, arg2 ):
        # do something
        rememberThis['a'] = arg1
        return someValue

myFunction= MyFunction()
Run Code Online (Sandbox Code Playgroud)

从那时起,使用myFunction作为一个简单的函数.您可以使用访问rememberThis字典myFunction.rememberThis.


too*_*php 15

您可以使用静态变量:

def foo(k, v):
  foo.a[k] = v
foo.a = {'a': 1, 'b': 2, 'c': 3}

foo('a', 100)
foo('b', 200)

print foo.a
Run Code Online (Sandbox Code Playgroud)


J.J*_*.J. 6

如果在函数内部创建'a'.它超出了范围.只需在函数外部(以及调用函数之前)创建它.通过这样做,程序离开函数后不会删除列表/哈希.

a = {'a':1,'b':2,'c':3}

# call you funciton here
Run Code Online (Sandbox Code Playgroud)


Ed.*_*Ed. 5

而不是在代码库上强制全局变量(可能是调用者的决定),我更喜欢保持状态与函数实例相关的想法.一个类对此有好处,但是没有很好地沟通你想要完成的东西,并且可能有点冗长.在我看来,利用封闭装置会更加清洁.

def function_the_world_sees():
    a = {'a':1,'b':2,'c':3}

    def actual_function(arg0, arg1):
        a[arg0] = arg1
        return a

    return actual_function
stateful_function = function_the_world_sees()

stateful_function("b", 100)    
stateful_function("b", 200)
Run Code Online (Sandbox Code Playgroud)

要记住的主要注意事项是,当您在"actual_function"中进行分配时,它们会出现在"actual_function"中.这意味着您无法将a重新分配给其他变量.我使用的工作是将我计划重新分配的所有变量放入每个变量或字典的单个元素列表中.