为什么我无法通过我的参数python

2024-07-04 17:05:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个简单的函数来计算模式,但似乎有一个参数传递不成功。你知道吗

我在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()

Tags: 函数inmodformainmodedef模式
2条回答

这行代码是你的问题。你知道吗

countdict= dict(zip(alist,[0]*len(alist)))

Python字典是可变对象,可以在函数中更改,但是字典本身不会传递给函数。只传递引用并按值传递。这意味着当您为countdict参数分配一个新字典时,您将丢失在mymain函数中创建的指向countdict的原始引用。你知道吗

正如我之前所说,这句话:

countdict= dict(zip(alist,[0]*len(alist)))

将删除您传入的对countdict的引用。因此,您正在打印的countdict变量是原始的空字典。与之相关的问题:How do I pass a variable by reference?将有助于解释为什么会发生这种情况。你知道吗

为了解决这个问题,可以将mode函数中的return语句更改为:

return (modelist, countdict)

它将返回一个包含modelistcountdict的元组。调用此函数时,您将编写:

(mod, countdict) = mode(magList, countdict)

确保返回修改后的countdict,这意味着print函数调用不应输出空字典。你知道吗

另一件需要注意的事情是,您传递给countdictmode无论如何都是空的,因此您可能会发现最好不要传递这个参数,而让mode只接受一个参数。你知道吗

相关问题 更多 >

    热门问题