【问题标题】:python UUID4 in function parameter函数参数中的python UUID4
【发布时间】:2018-01-17 18:48:32
【问题描述】:
     def __init__(self, unique_id=uuid.uuid4())

如果用户没有指定一个,我希望我实例化的每个对象都有一个不同的 ID。当我实例化几个类时,它们都具有相同的 UUID。我可以对这里发生的事情进行技术概述,以便我更好地理解 Python 函数和初始化程序吗?

【问题讨论】:

  • Python 中的默认参数是在函数 definition 时评估的,而不是在函数 call 时评估的。它们成为函数对象的一部分。我敢肯定在某处有关于这个的问题。

标签: python python-2.7


【解决方案1】:

我相信它会让你的代码更干净,如果你只是将它添加到方法体中,例如:

def __init__(self, unique_id=None):
    if not unique_id:
        unique_id = uuid.uuid4()

更紧凑的版本是:

def __init__(self, unique_id=None):
    unique_id = uuid.uuid4() if not unique_id else unique_id

如果需要,这将允许您覆盖 unique_id

【讨论】:

  • 这是默认参数的常用模式,应该在 Python 中调用时进行评估。
【解决方案2】:

您提出的代码的问题是默认参数仅评估一次(当您导入模块时),请参见例如"Least Astonishment" and the Mutable Default Argument.

为了解决这个问题,您应该遵循使用None 作为“非用户提供”标志的习惯用法,如下所示:

def __init__(self, unique_id=None):
    if unique_id is None:
        unique_id = uuid.uuid4()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2022-01-08
    • 2013-11-12
    • 1970-01-01
    • 2014-10-29
    • 2020-12-12
    • 2013-02-04
    • 2021-11-04
    相关资源
    最近更新 更多