更新:对不起我对这个问题的假设是错误的。它是由于我试图使函数并行并有多个过程改变相同的字典。我如何设计我的功能,以便它允许这个?如果我必须发送字典(在这种情况下),那么它将继续覆盖自己,并且不能跨越所有核心。我很高兴重新设计这个功能,但不知道我怎么做,并且仍然将它分散到多个核心上。
为了简化,我基本上有以下内容:
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的进程,所以我不想在每个函数中声明变量。
我正在使用函数,但如果我需要使用类或者有另一种方法来解决这个问题,请告诉我,我会重新考虑我的方法。
答案 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