一直以为Python里面字典的pop只能有一个参数,今天写Flask的时候发现写注销操作的时候竟然有session.pop('logged_in', None),这样的方式,如下。

@app.route('/logout')
def logout():
    session.pop('logged_in', None)
    flash('You were logged out')
    return redirect(url_for('show_entries'))

翻了翻Python的文档,还真的找到了这种用法。
https://docs.python.org/2/library/stdtypes.html?highlight=pop#dict.pop
文档中写道:

pop(key[, default])
If key is in the dictionary, remove it and return its value, else return default. If default is not given and key is > not in the dictionary, a KeyError is raised.

New in version 2.3.

也就是说,如果pop一个不存在的键的时候,只有一个参数会抛出一个KeyError,而指定了第二个参数None之后,即便尝试pop一个不存在的键,也不会有异常,仅仅是什么都不做。就像下面这样:

>>> dd = {}
>>> dd['a'] = 1
>>> dd
{'a': 1}
>>> dd['b'] = 2
>>> dd.pop('c')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
>>> dd.pop('c',None)
>>>