Python:在函数a中创建Dict并在函数b中调用它

时间:2019-06-07 11:48:00

标签: python dictionary scope

我在python中创建字典有问题。 在我的主循环中,我调用函数1,该函数应创建一个空字典。 函数1调用函数2。 函数2自我调用(遍历游戏树) 但是我不能使用我在f1中创建的字典。 并且不可能通过它作为增值。 我想让dict全局访问

startMonth.start > endMonth.end

这是我的“真实”代码:) >> MinMaxComputerMove <<需要编辑字典。 但是在结束点之后,我无法通过它,因为for循环还在继续。

def f1(): # function 1
    #test_dict = {} # this needs to be global scope

    #test_dict["key"] = "value"
    test_dict["key2"] = "value2"
    print (test_dict)
    f2()

def f2(): # function 2
    # here starts a loop that calls f2 again and again -> global dict is needed
    # dict needs to be created 

    print (test_dict)


test_dict = {} # only works without errors when i create it before calling f1
test_dict["key"] = "value"
f1()

2 个答案:

答案 0 :(得分:0)

“返回值”的答案是:

def f1(test_dict): # function 1
    #test_dict = {} # this needs to be global scope

    #test_dict["key"] = "value"
    test_dict["key2"] = "value2"
    print ('In f1 {}'.format(test_dict))
    f2(test_dict)

    return test_dict

def f2(test_dict): # function 2
    # here starts a loop that calls f2 again and again -> global dict is needed
    # dict needs to be created 

    print ('In f2 {}'.format(test_dict))

    return test_dict

test_dict = {} # only works without errors when i create it before calling f1
test_dict["key"] = "value"
test_dict = f1(test_dict)

其输出为:

In f1 {'key2': 'value2', 'key': 'value'}
In f2 {'key2': 'value2', 'key': 'value'}

但是在某种程度上,您可能希望将其中的一些放入类中,然后将test_dict作为类中的变量。这样一来,f1f2(假设它们是类方法)就可以访问类变量,而无需将其作为参数传递给这两个方法。

class Example:

    def __init__(self):
        self._test_dict = {}
        self._test_dict["key"] = "value"


    def f1(self): # function 1
        self._test_dict["key2"] = "value2"
        print ('In f1 {}'.format(self._test_dict))
        self.f2()

    def f2(self): # function 2
        print ('In f2 {}'.format(self._test_dict))

example = Example()
example.f1()

答案 1 :(得分:0)

下面是脚本尝试的非常简单的版本。您需要考虑函数参数应该是什么(传递给函数的参数),以及函数在执行结束时应提供的内容(通过return语句提供给您)。这样,您可以操作对象而不必将所有内容保持在全局范围内,并且可以避免在例程开始时不必初始化每个可能的变量。

  • Python Functions
  • Return Statement

    def f1():
        f1_dict = {}
        f1_dict = f2(f1_dict)
    
        return f1_dict
    
    def f2(dict_arg):
        f2_dict = {}
        for i in range(0,5):
            f2_dict[str(i)] = i**i
    
        return f2_dict
    
    dictionary = f1()
    print(dictionary)