我写了一个简单的函数来计算模式,但似乎有一个参数传递不成功。你知道吗
我在main函数中初始化countdict= dict()
,然后传递它mod = mode(magList, countdict)
。你知道吗
在mode(alist, countdict)
,countdict= dict(zip(alist,[0]*len(alist)))
。并且countdict
可以在模式下打印。你知道吗
但是当我尝试在main函数中print(countdict)
时,输出说它是空的。我检查我的代码,它说在函数模式下,我没有使用countdict。这怎么可能。你知道吗
整个代码如下:
def mode(alist, countdict):
countdict= dict(zip(alist,[0]*len(alist)))
for x in alist:
countdict[x]+=1
maxcount =max(countdict.values())
modelist = [ ]
for item in countdict:
if countdict[item] == maxcount:
modelist.append(item)
return modelist
def makeMagnitudeList():
quakefile = open("earthquakes.txt","r")
headers = quakefile.readline()
maglist = [ ]
for aline in quakefile:
vlist = aline.split()
maglist.append(float(vlist[1]))
return maglist
def mymain():
magList = makeMagnitudeList()
print(magList)
countdict= dict()
mod = mode(magList, countdict)
print("mode: ", mod)
print(countdict)
if __name__=='__main__':
mymain()
这行代码是你的问题。你知道吗
Python字典是可变对象,可以在函数中更改,但是字典本身不会传递给函数。只传递引用并按值传递。这意味着当您为
countdict
参数分配一个新字典时,您将丢失在mymain
函数中创建的指向countdict
的原始引用。你知道吗正如我之前所说,这句话:
将删除您传入的对
countdict
的引用。因此,您正在打印的countdict
变量是原始的空字典。与之相关的问题:How do I pass a variable by reference?将有助于解释为什么会发生这种情况。你知道吗为了解决这个问题,可以将
mode
函数中的return语句更改为:它将返回一个包含
modelist
和countdict
的元组。调用此函数时,您将编写:确保返回修改后的
countdict
,这意味着print
函数调用不应输出空字典。你知道吗另一件需要注意的事情是,您传递给
countdict
的mode
无论如何都是空的,因此您可能会发现最好不要传递这个参数,而让mode
只接受一个参数。你知道吗相关问题 更多 >
编程相关推荐