【问题标题】:Deleting an default argument inside function in Python在 Python 中删除函数内部的默认参数
【发布时间】:2020-08-19 12:38:01
【问题描述】:

我在控制台中尝试了以下操作:

>>> def f(l=[]):
...     l.append(1)
...     print(l)
...     del l
... 
>>> f()
[1]
>>> f()
[1, 1]

我不明白的是解释器如何在删除指令之后仍然能够找到相同的列表l。 从文档中l=[] 应该只评估一次。

【问题讨论】:

  • 每次调用函数时,都会创建局部变量 l 并将其设置为默认参数的值。默认参数的值是在函数定义时创建的,但变量l 是在每次函数运行时创建的。
  • del 的局部变量,就在函数的末尾,永远不会产生任何影响。无论如何,这正是变量将要发生的事情。

标签: python python-3.x function del


【解决方案1】:

变量不是对象。每次调用该函数时,都会创建局部变量 l 并(如果需要)设置为默认值。

对象[],即l的默认值,是在函数定义时创建的,但变量l是在函数每次运行时创建的。

【讨论】:

  • 请注意,如果目标是清除list 的内容,del l[:] 会这样做; l 将保持绑定到 list(当函数正常返回后立即解除绑定),但列表本身的内容将被删除,以便下次调用时清楚。
  • 谢谢,实际上我们的目标只是了解 del 对于默认函数参数会发生什么,因为我在互联网上没有找到任何相关信息。
【解决方案2】:

要删除列表中的元素,应使用del l[:]。如果您只使用l,列表将保持其本身。

def f(l=[]):
l.append(1)
print(l)
del l[:]
print(l)
>>> f()
[1]    #element in the list
[]     #list after deletion of the element
>>> f()
[1]
[]
>>> f()
[1]
[]

【讨论】:

  • 欢迎来到 Stack Overflow 并感谢您的贡献。不幸的是,您的代码没有正确缩进。请参阅Markdown Editing Help 了解如何正确格式化。
猜你喜欢
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2013-09-07
  • 2017-04-13
  • 2023-01-13
相关资源
最近更新 更多