如何从函数中引用外部变量?

时间:2012-02-12 02:17:17

标签: python

更新:对不起我对这个问题的假设是错误的。它是由于我试图使函数并行并有多个过程改变相同的字典。我如何设计我的功能,以便它允许这个?如果我必须发送字典(在这种情况下),那么它将继续覆盖自己,并且不能跨越所有核心。我很高兴重新设计这个功能,但不知道我怎么做,并且仍然将它分散到多个核心上。

为了简化,我基本上有以下内容:

list = [1,2,3,10]
dictionary = {}
for x in list:
    for xx in range(100):
        for xxx in range(100):
            dictionary[x]=xx*xxx

这样可行,但是当我在函数中包装for循环时,我得到:  NameError:未定义全局名称“字典”

def test(x):
        for xx in range(100):
            for xxx in range(100):
                dictionary[x]=xx*xxx

我知道这与命名空间有关但我不想在这种情况下向函数发送变量,因为我认为它会覆盖变量字典。如何在函数中引用字典变量?我问的原因是我想创建一个跨越多个cpu的进程,所以我不想在每个函数中声明变量。

我正在使用函数,但如果我需要使用类或者有另一种方法来解决这个问题,请告诉我,我会重新考虑我的方法。

3 个答案:

答案 0 :(得分:3)

再试一次:

lst = [1,2,3,10]
dictionary = {}
def test(x):
    for xx in range(100):
        for xxx in range(100):
            dictionary[x]=xx*xxx

for x in lst:
    test(x) 

如果未定义名称,您只会获得NameError。它与范围无关。

答案 1 :(得分:2)

  

如何从函数中引用外部变量?

别。将其作为参数传递。

答案 2 :(得分:0)

尽量避免使用全局变量并将所需的变量传递给函数:

>>> def test(x, dictionary):
...     for xx in range(100):
...         for xxx in range(100):
...             dictionary[x] = xx * xxx
... 
>>> list_of_numbers = [1, 2, 3, 10]
>>> dictionary = {}
>>> 
>>> for x in list_of_numbers:
...     test(x, dictionary)
... 
>>> print dictionary
{1: 9801, 2: 9801, 3: 9801, 10: 9801}

我已重命名为list,因为它是内置的Python。

这显然可以简化为:

>>> for x in list_of_numbers:
...     dictionary[x] = 99 * 99