python - 列出默认参数的最佳方法
问题描述
在本文https://florimond.dev/blog/articles/2018/08/python-mutable-defaults-are-the-source-of-all-evil/中,以下代码发布为 pythonic 解决方案:
def append(element, seq=None):
if seq is None:
seq = []
seq.append(element)
return seq
对于列表具有默认参数的问题。对我来说,它看起来并不漂亮,我想知道是否有某种方式可以有一个可变的默认值并且没有 if 语句。就像是:
def append(element, seq=defaultlist([])):
seq.append(element)
return seq
解决方案
到目前为止,您得到的评论是正确的。有关这方面的进一步说明,请参阅“Least Astonishment”和 Mutable Default Argument
但是,实际上有一种解决方法可以满足您的需求。我不会说它比第 1 版(每个人都使用)更优雅,而且它还需要在你的函数中添加一行代码:你必须在seq
函数内部创建一个副本,所以更新的是这个副本,并且不是“默认” seq
:
def foo(x, seq=[]):
seq = list(seq)
seq.append(x)
return seq
然后测试它:
>>> foo(1)
[1]
>>> foo(2)
[2]
>>> foo(3, ['a', None])
['a', None, 3]
>>> foo(4)
[4]
推荐阅读
- python - 如何从子小部件类中打印父小部件的名称?
- python - 如何使用 plt.plot 更改子图(matplotlib)中图形中线条的颜色?
- reactjs - react-scripts 3.0.0 更新后延迟加载时出现“模块解析失败”错误
- python - 安装密码学时 pip._vendor.pep517.wrappers.BackendUnavailable 错误
- python - Keras 给出错误 - ValueError:检查目标时出错:预期的 dense_3 有 4 个维度,但得到的数组形状为 (10000, 1)
- c# - 为什么我的 API 在使用身份验证模式 =“Windows”时会引发错误
- javascript - 为什么我的 console.log(variable) 显示两个不同的值?
- python - Python - 从带有识别表达式的字符串创建 JSON
- java - @Value 注释不起作用,总是在基于 spring xml 的配置中给出空值
- amazon-web-services - 使用 Amazon Documentdb 设置 Pritunl