python - 使用来自另一个函数的列表会将其传递为空,为什么?
问题描述
我从 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
解决方案
在 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 = []
推荐阅读
- java - 根据用例创建不同对象/调用不同方法的合适设计是什么?
- python - 获取最小值的索引 Numpy Python
- linux - 在 Docker 容器中运行 docker compose
- kubernetes - 如何以只读模式访问 Microk8s?
- ethereum - ZoKrates 无效证人产生有效证据
- json - python3 json.loads(response.decode('utf-8')) UnicodeDecodeError:
- reactjs - Antd设计表列->如何将对象数组传递给dataIndex
- c++ - `const` 关键字是在函数声明中使用,还是在定义中使用,或者两者兼而有之?
- javascript - 使用可重用函数动态更改嵌套 JSON 值
- pandas - 带有 DatetimeIndex 的 Pandas SetIndex