Python update()方法到底做了什么(假设if条件给出的是一个空字典)?

Python update()方法到底做了什么(假设if条件给出的是一个空字典)?,python,django,python-3.x,Python,Django,Python 3.x,我不明白dict_字典对这里的email_ctx字典做了什么,它是否保持为空?它是否覆盖了这里的一些数据 class EmailTemplateContext(Context): @staticmethod def make_link(path): return settings.MAILING_LIST_LINK_DOMAIN + path def __init__(self, subscriber, dict_=None, **kwargs):

我不明白dict_字典对这里的email_ctx字典做了什么,它是否保持为空?它是否覆盖了这里的一些数据

class EmailTemplateContext(Context):
    @staticmethod
    def make_link(path):
        return settings.MAILING_LIST_LINK_DOMAIN + path

    def __init__(self, subscriber, dict_=None, **kwargs):
        if dict_ is None:
            dict_ = {}

        email_ctx = self.common_context(subscriber)
        email_ctx.update(dict_)
        super().__init__(email_ctx, **kwargs)

    def common_context(self, subscriber):
        subscriber_pk_kwargs = {'pk': subscriber.id}
        unsubscribe_path = reverse(
            'mailing_list:unsubscribe',
            kwargs=subscriber_pk_kwargs,
        )
        return {
            'subscriber':subscriber,
            'mailing_list': subscriber.mailing_list,
            'unsubscribe_link': self.make_link(unsubscribe_path),
        }
email_ctx.update(dict_)将使用dict_值更新email_ctx。如果dict={},则nothing将在电子邮件上更新。这就是它的工作原理:

>>> email_ctx = { 'name': 'trump', 'age': 60}
>>> dict_ = { 'country': 'USA'} 
>>> email_ctx.update(dict_)
>>> email_ctx
{'name': 'trump', 'age': 60, 'country': 'USA'}
>>> dict_3 = {'name': 'obama'}
>>> email_ctx.update(dict_3)
>>> email_ctx
{'name': 'obama', 'age': 60, 'country': 'USA'}
>>> dict_4 = {}
>>> email_ctx.update(dict_4)
>>> email_ctx
{'name': 'obama', 'age': 60, 'country': 'USA'}

它可能不是空的(如果您使用非空的
命令初始化
EmailTemplateContext
),在这种情况下,它会添加到
电子邮件\u ctx
。如果它是空的,
email\u ctx
将保持不变。它不仅会添加到
email\u ctx
中,还会更新任何已经存在的属性。是的,它可以覆盖一些数据。正确,我不喜欢使用“添加”。见@dirkgroten我得到的很酷的解释it@Fnechz一些方法可能会有所帮助:1/阅读
self.common_context
方法的代码并找出它返回的对象类型,2/然后阅读此类型的
update
方法的文档,3/最终启动Python shell,导入此类型(如果不是内置的),并尝试它的更新方法,以确保您完全理解文档。这并不比在这里提出一个问题花费更多的时间,答案将是正确的(这里远没有保证)。