通过循环缩进的变量类型 Python

type of variable through indentation of loops Python

这是一个片段,在代码中通过自上而下的方式,我打印了名为"podium"的变量的类型) 这是代码:

def frequence(entranche):
    podium = []
    print("premier podium", type(podium))
    for item in entranche:
        print ("deuxieme podium", type(podium))
        scat = len(entranche)
        for indice in range (len(entranche)):            
            if entranche[indice] == item:
                scat -= 1
            frequence = len(entranche) - scat

        podium = podium.append(frequence)
        print("troisieme podium", type(podium))
        plus_haute_frequence = max(podium)   
    return(plus_haute_frequence)
print(frequence("Je suis né dans le béton Coincé entre deux maisons".split()))

在代码之后, 这是输出:

premier podium <class 'list'>
deuxieme podium <class 'list'>
troisieme podium <class 'NoneType'>

我不明白为什么 podium 变量会丢失他的类型。

有人说我:

"Now, i think your problem is this: troisieme podium - right? It's because of podium = podium.append(frequence). Just append the new value to your list, re-assigning the variable istn't correct here. Just do podium.append(frequence)".

没错。但我不明白为什么。可能我们认为这是一个新变量。如果我需要制作,我该怎么办?某些方法在编写 variable = variable.method() 之前不会更改命名变量 {在 ruby 语言中有带有“!”的方法并且没有“!”}

因为append总是returnsNone。您可以在终端中自行轻松验证这一点。

没有不修改的追加:你能做的最好的事情就是复制列表并追加到副本。

这是因为 append() 方法就地修改了列表。它不是 return 一个新列表,而是修改作为参数给出的列表。它的 return 值是 None,这就是为什么你的 'troisieme podium' 类型是 NoneType.

>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> print(a.append(5))
None
>>> a
[1, 2, 3, 4, 5]

所以这一行:

podium = podium.append(frequence)

应该是:

podium.append(frequence)