1、pop方()
查看SQLAlchemy的create_engine方法时看到
default_strategy = 'plain'
strategy = kwargs.pop('strategy', default_strategy)
这段代码,不是很理解,查了一下手册,原来字典是有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.
如果key在一个字典中,移除并返回字典值,否则返回默认值,如果没有默认值并且key不在字典中,则抛出KeyError异常
1 dt = {'e':{'aaa':132},'b':2,'c':332,'d':32,'ee':'gg'} 2 print dt.pop('f', 'bbbbbb') #因为f不在字典dt中,所以返回默认值bbbbbb
print dt.pop('e', 'bbbbbb') #e在字典dt中, 返回其字典值{'aaa':132}
create_engine函数完整代码为:
1 default_strategy = 'plain' 2 def create_engine(*args, **kwargs): 3 strategy = kwargs.pop('strategy', default_strategy) 4 strategy = strategies.strategies[strategy] 5 return strategy.create(*args, **kwargs)
首先kwargs是一个字典,第3行的意思就是如果strategy在字典kwargs中,且其值为字典,则将其在kwargs中移除,如果strategy不在kwargs中,则返回默认值default_strategy。
2、setdefault(key, [default])
如果key在字典中,则返回这个键对应的值,否则插入这个键,并以default作其值,default不设置的情况下默认为None
3、get(key[, default])
项目中发现字典没相应的键,引起异常,打算用 res = dt[kId] if kId in dt else None
后来同事说用get(key, [, default]) 解决,效果更佳。