Python导入的函数不修改局部变量
我有一个python脚本myscript.py,其中包含许多函数,还有一个名为'resultsdict'的全局变量,它是一个空字典。我想重用其中一个函数myfunc myfunc接受单个输入,创建字典tempdict,然后更新resultsdict key=input,value=tempdict。我通常通过循环列表来使用这个函数,调用列表中的每个成员作为输入Python导入的函数不修改局部变量,python,Python,我有一个python脚本myscript.py,其中包含许多函数,还有一个名为'resultsdict'的全局变量,它是一个空字典。我想重用其中一个函数myfunc myfunc接受单个输入,创建字典tempdict,然后更新resultsdict key=input,value=tempdict。我通常通过循环列表来使用这个函数,调用列表中的每个成员作为输入 resultsdict = {} mylist = [1,2,3] for x in mylist: myfunc(x) pri
resultsdict = {}
mylist = [1,2,3]
for x in mylist:
myfunc(x)
print(resultsdict)
{1:{dict of results-1},2:{dict of results-2},3:{dict of results-3}}
我想在第二个脚本script2.py中重用myfunc。script2.py还包含一个名为resultsdict的全局变量。当我将myfunc导入script2并运行它时,resultsdict变量不会更新
from myscript import myfunc
resultsdict = {}
mylist = [1,2,3]
for x in mylist:
myfunc(x)
print(resultsdict)
{}
如果您有任何帮助,我们将不胜感激。在for语句中,您使用list,但在前面的行中,您声明mylist!! 注意:没有列表,这就是代码不起作用的原因 编辑您的声明,如下所示:
for x in my mylist:
...
也导入resultsdict。 如果你想复制的话
from myscript import myfunc, resultsdict
mylist = [1,2,3]
for x in mylist:
myfunc(x)
print(resultsdict)
我猜您在myfunc中修改了全局范围的resultsdict。
尝试更改此行为以通过属性传输resultsdict:
def myfync(x, resultsdict):
...
或者添加关于resultsdict来自全局范围的行:
def myfync(x):
global resultsdict
...
无论如何,在某个函数中修改可变对象都是不好的方法。但是您没有从myfunc返回任何内容,而且在myfunc中您正在重新声明resultsdict={},因此每次调用该函数时,它都会设置resultsdict={}。请显示所有代码并给出预期结果的示例。myfunc将更新其范围内的resultsdict变量。这根本不是它的工作原理。您可以使用类,也可以使用显式接受和返回值。myfunc不返回任何内容是正确的。不正确的是,每次我调用函数时,它都会设置resultsdict={}——赋值是在脚本主体中完成的,而不是在函数中完成的,这是伪代码中的一个错误。更新原始帖子以修复