Python:返回的列表长度为其长度的两倍

Python:返回的列表长度为其长度的两倍,python,python-3.x,list,Python,Python 3.x,List,我正在读一个包含235886字符串的文件。我通过使用和从文件中读取所有这些字符串,并将它们附加到一个空列表中。由于文件中的每个字符串都附加了一个新行字符\n,因此我使用split()函数只提取字符串 当我打印列表的长度时,它会显示其大小的两倍471772 我的密码在这里 word_list = [] DICTIONARY = 'dictionary.txt' def load_words(): with open(DICTIONARY,'r') as dictwords :

我正在读一个包含
235886
字符串的文件。我通过使用
从文件中读取所有这些字符串,并将它们附加到一个空列表中。由于文件中的每个字符串都附加了一个新行字符
\n
,因此我使用
split()
函数只提取字符串

当我打印列表的长度时,它会显示其大小的两倍
471772

我的密码在这里

word_list = []
DICTIONARY =  'dictionary.txt'

def load_words():
    with open(DICTIONARY,'r') as dictwords :
        for word in dictwords:
            word_list.append(word.split('\n')[0])
        print(len(word_list))
    return word_list

load_words()
输出显示为

235886
471772
我无法找出我做错了什么。任何帮助,非常感谢

完整代码
您调用了两次
load\u words
,由于
word\u list
是一个全局变量,因此所有单词都会追加两次。通过将第一次调用的结果存储在变量中进行更改:

l_words = load_words()

# ...

def max_word_value(word_list=l_words):
    # ... 

你看过列表中的内容了吗?只有在你调用
load\u words
两次时才会发生这种情况。@Exho它已经解决了。我没有在函数外做任何操作,而是清空了函数内的列表,并使其生效。在收到答案后,请不要更改问题中的代码。我正在回滚那个编辑。(请注意,我不会反对你发布完整代码。只是不要发布“固定”代码。)不,但你可以发布真实代码(函数中没有
word\u list=[]
)。发布您的完整代码是可以的。将问题更改为与其他问题相关是不合适的。谢谢您的回答。但是我并没有在我的代码中的任何地方调用
max\u word\u value
函数,但仍然要计算函数参数中的表达式?是的,默认参数在定义时被计算并绑定到函数。我想我理解你的意思,Python会计算它,但不会在运行时放入该块,但随着计算的完成,函数调用了两次,对吗?
l_words = load_words()

# ...

def max_word_value(word_list=l_words):
    # ...