避免空列表的默认参数是什么样的pythonic方法?
有时,具有默认参数似乎自然,这是一个空列表。 然而
https://coderoad.ru/1132941/
.
例如,如果我有一个功能:
第一次打电话时,它将默认工作,但呼叫将更新现有列表 /一般 "a" 对于每一个挑战/ 并打印更新的版本。
所以,有什么是获得所需行为的Pythonic方法 /每个呼叫的新鲜清单/?
https://coderoad.ru/1132941/
.
例如,如果我有一个功能:
def my_func/working_list = []/:
working_list.append/"a"/
print/working_list/
第一次打电话时,它将默认工作,但呼叫将更新现有列表 /一般 "a" 对于每一个挑战/ 并打印更新的版本。
所以,有什么是获得所需行为的Pythonic方法 /每个呼叫的新鲜清单/?
没有找到相关结果
已邀请:
7 个回复
莫问
赞同来自:
https://docs.python.org/refere ... tions
说你必须使用
默认和明确
https://coderoad.ru/3257919/
在身体功能。
涵秋
赞同来自:
引导公路锅 Python
" 作为 "
可变的默认参数
":
http://docs.python-guide.org/e ... chas/
/
引用: "
默认参数 Python 在定义函数时计算一次,而不是每次调用函数时 /它是如何发生的,说, Ruby/. 这意味着如果使用默认的可变参数和突变,则您还可以为所有未来的函数调用进行此对象。
"
其实现的示例代码:
风见雨下
赞同来自:
if working_list is None: working_list = []
您也可以利用布尔运算符 or 由B确定。 python:
working_list = working_list or []
虽然如果来电者会给你一个空名单,它会出乎意料地表现 /这被认为是假的/ 作为 working_list 并期望您的功能将改变他给她的清单。
三叔
赞同来自:
改变
传输的参数如图所示
, 看答案 HenryR /=None, 检查可用性 None 里面/.
但是如果你没有打算变异参数,只需将它用作列表的起点,即可简单地复制它:
/或者在这个简单的案件中
print starting_list + ["a"]
, 但我认为这只是一个玩具的例子/
一般来说,你的论点的突变是一种糟糕的风格 Python. 预期完全更改对象的单一功能 - 这些是对象的方法。 更频繁地突变可选的论点 — 只是在一些挑战中发生的副作用是最好的界面?
如果你习惯了 C "显示参数", 这绝对不需要 - 您可以始终以元组的形式返回多个值。
如果您这样做,可以在不创建中间列表的情况下有效构建长期的结果列表,请考虑将其写为发电机并使用
打电话。 因此,您的挑战同意仍然非常干净。
一张突变可选参数的图片
经常是隐藏的 "memo" ARG 在递归函数中:
冰洋
赞同来自:
或字典
. 它们是可选的,而且比语法更好
myFunc/[1, 2, 3]/
.
如果你想经过Motorcade:
如果要传输字典:
冰洋
赞同来自:
此片段使用操作员语法 if else. 我特别喜欢这个,因为它是一个整洁的小单行没有结肠等,而且它几乎被读为正常的英语建议。 :/
在你的情况下,你可以写
涵秋
赞同来自:
什么是真实的: def Fn/data = []/:
但/ 这是一个好主意,以便您的数据列表每次呼叫开始空。
B./ 这是一个好主意,所以所有调用在调用时不提供任何参数的调用功能将收到空列表作为数据。
c/ - 如果您的数据是行列表,这是一个合理的想法。
d/ 这是一个坏主意,因为默认情况下 [] 将累积数据,默认情况下 [] 将随着后续挑战而改变。
回答:
d/ 这是一个坏主意,因为默认情况下 [] 将累积数据,默认情况下 [] 将随着后续挑战而改变。