【问题标题】:Is there an Immutable dictionary type in Python?Python中有不可变字典类型吗?
【发布时间】:2020-10-20 03:06:25
【问题描述】:

我想定义一个函数,它有像字典一样的参数,例如:

def my_func(params={'skip': True}):
    print(params['skip'])
    params['skip'] = False

但是,如果使用可变字典 dict() - 它只会为函数创建一次。并且在下次调用期间会显示对该字典所做的修改。

my_func()  # prints True
my_func()  # prints False

目前我唯一的想法是使用键/值对的元组,可以将其转换为字典,而不是像字典一样提供数据。

def my_func(params=(('skip', True))):
    params = dict(params)
    print(params['skip'])
    params['skip'] = False

但是,我真的很想避免这种显式转换为字典。 我的问题是:dict() 是否有一个不可变字典替代品,因为 list()tuple()

【问题讨论】:

  • 您可以创建 dict 的 deepcopy,然后在函数体中使用。 copy 模块为 dicts 提供了 deepcopy 功能。
  • 为什么不简单地使用带有默认参数的正确函数参数? def my_func(skip=True)
  • 如果params 是不可变的,您希望params['skip'] = False 的结果是什么?

标签: python dictionary arguments immutability


【解决方案1】:

这将避免使用默认的paramsfunc 的每次调用共享相同的dict(这似乎是您的问题):

def my_func(params=None):
    params = {'skip': True} if params==None else params

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2012-01-21
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多