merge 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符_59个Python使用技巧,从此你的Python与众不同(二)...

本文介绍了Python编程中的几个关键技巧,包括collections.OrderedDict的使用,函数默认参数的陷阱,以及不同下划线用法的含义。文章通过实例解释了OrderedDict如何工作,函数默认参数为何可能导致意外共享,以及单下划线、双下划线在代码中的特殊意义。此外,还提到了Python中下划线在国际化和特殊方法名中的应用。
摘要由CSDN通过智能技术生成

- 点击上方“中国统计网”订阅我吧!-

9fc2d5641c914025998fadd4036de536.gif

11. Python代码微优化之加快查找

collections.OrderedDict类:

def __setitem__(self, key, value, dict_setitem=dict.__setitem__):if key not in self:root = self.__rootlast = root[0]last[1] = root[0] = self.__map[key] = [last, root, key]return dict_setitem(self, key, value)

注意最后一个参数:dict_setitem=dict.setitem。如果你仔细想就会感觉有道理。将值关联到键上,你只需要给__setitem__传递三个参数:要设置的键,与键关联的值,传递给内建dict类的__setitem__类方法。等会,好吧,也许最后一个参数没什么意义。最后一个参数其实是将一个函数绑定到局部作用域中的一个函数上。具体是通过将dict.__setitem__赋值为参数的默认值。这里还有另一个例子:

def not_list_or_dict(value):return not (isinstance(value, dict) or isinstance(value, list))def not_list_or_dict(value, _isinstance=isinstance, _dict=dict, _list=list):return not (_isinstance(value, _dict) or _isinstance(value, _list))

这里我们做同样的事情,把本来将会在内建命名空间中的对象绑定到局部作用域中去。因此,python将会使用LOCAL_FAST而不是LOAD_GLOBAL(全局查找)。那么这到底有多快呢?我们做个简单的测试:

$ python -m timeit -s 'def not_list_or_dict(value): return not (isinstance(value, dict) or isinstance(value, list))' 'not_list_or_dict(50)'1000000 loops, best of 3: 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值