首页 > 解决方案 > 使用来自另一个函数的列表会将其传递为空,为什么?

问题描述

我从 python 中的一个函数返回 5 个列表,然后我定义了另一个函数:

def excel_parser(list_titles, list_links, list_prices, num_elem_titles, num_elem_link):

然后我调用该函数并尝试了所有方法,这是唯一给出结果的函数,但是列表被清空,它们反而包含项目。

excel_parser(list_titles=[], list_links=[], list_prices=[], num_elem_titles=[], num_elem_link=[])

这就是我在第二个函数中使用函数的方式:

    print(len(list_titles))

row = 3

for line in list_titles:
    if row <= num_elem_titles:
        Foglio_Annunci["B" + str(row)] = line
        row += 1

row = 3

for line in list_links:
    if row <= num_elem_link:
        Foglio_Annunci["C" + str(row)] = line
        row += 1

row = 3

for line in list_prices:
    if row <= num_elem_link:
        Foglio_Annunci["D" + str(row)] = line
        row += 1

row = 3

标签: pythonlistfunction

解决方案


在 python 中,将列表作为参数几乎肯定不是您想要做的,如下所示

定义函数时会创建一次新列表,并且每次后续调用都使用相同的列表。

因此,如果您想采用该方法,请改用此方法:

def append_to(element, to=None):
if to is None:
    to = []
to.append(element)
return to

会出现正确的行为,通常任何放在函数括号中的东西(例如定义一个列表,或调用另一个函数),在程序启动时只调用一次,并且永远不会再次调用。

所以总结一下,而不是:

excel_parser(list_titles=[], list_links=[], list_prices=[], num_elem_titles=[], num_elem_link=[])

利用:

excel_parser(list_titles=None, ...)

并在每个函数的内部:

if list_titles is None:
    to = []

推荐阅读