神奇的 intern 机制 字符串类型作为python中最常用的数据类型之一,python解释器为了提高字符串使用的效率和使用性能,做了很多优化。
例如:python解释器中使用了 intern(字符串驻留)的技术来提高字符串效率,什么是intern机制?就是同样的字符串对象仅仅会保存一份,放在一个字符串储蓄池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象。
>>> s1=hello>>> s2=hello>>> s1 is s2true# 如果有空格,默认不启用intern机制>>> s1=hell o>>> s2=hell o>>> s1 is s2false# 如果一个字符串长度超过20个字符,不启动intern机制>>> s1 = a * 20>>> s2 = a * 20>>> s1 is s2true>>> s1 = a * 21>>> s2 = a * 21>>> s1 is s2false>>> s1 = ab * 10>>> s2 = ab * 10>>> s1 is s2true>>> s1 = ab * 11>>> s2 = ab * 11>>> s1 is s2false site-packages和 dist-packages 如果你足够细心,你会在你的机器上,有些包是安装在 site-packages 下,而有些包安装在 dist-packages 下。
它们有什么区别呢?
一般情况下,你只见过 site-packages 这个目录,而你所安装的包也将安装在这个目录下。
而 dist-packages 其实是 debian 系的 linux 系统(如 ubuntu)才特有的目录,当你使用 apt 去安装的 python 包会使用 dist-packages,而你使用 pip 或者 easy_install 安装的包还是照常安装在 site-packages 下。
debian 这么设计的原因,是为了减少不同来源的 python 之间产生的冲突。
如何查找 python 安装目录
>>> from distutils.sysconfig import get_python_lib>>> print(get_python_lib())/usr/lib/python2.7/site-packages argument 和 parameter 的区别 arguments 和 parameter 的翻译都是参数,在中文场景下,二者混用基本没有问题,毕竟都叫参数嘛。
但若要严格再进行区分,它们实际上还有各自的叫法
parameter:形参(formal parameter),体现在函数内部,作用域是这个函数体。
argument :实参(actual parameter),调用函数实际传递的参数。
举个例子,如下这段代码,error 为 argument,而 msg 为 parameter。
def output_msg(msg): print(msg)output_msg(error)
dict() 与 {} 生成空字典有什么区别 在初始化一个空字典时,有的人会写 dict(),而有的人会写成 {}
很多人会想当然的认为二者是等同的,但实际情况却不是这样的。
在运行效率上,{} 会比 dict() 快三倍左右。
使用 timeit 模块,可以轻松测出这个结果
$ python -m timeit -n 1000000 -r 5 -v dict()raw times: 0.0996 0.0975 0.0969 0.0969 0.09941000000 loops, best of 5: 0.0969 usec per loop$$ python -m timeit -n 1000000 -r 5 -v {}raw times: 0.0305 0.0283 0.0272 0.03 0.03171000000 loops, best of 5: 0.0272 usec per loop 那为什么会这样呢?
探究这个过程,可以使用 dis 模块
当使用 {} 时
$ cat demo.py{}$$ python -m dis demo.py 1 0 build_map 0 2 pop_top 4 load_const 0 (none) 6 return_value 当使用 dict() 时:
$ cat demo.pydict()$$ python -m dis demo.py 1 0 load_name 0 (dict) 2 call_function 0 4 pop_top 6 load_const 0 (none) 8 return_value 可以发现使用 dict(),会多了个调用函数的过程,而这个过程会有进出栈的操作,相对更加耗时。
新能源储能电容应用之燃料电池汽车辅助储能系统
光通信抢占5G发展制高点,激光应用迈向高精尖
国际汽配展/美国汽配展/2006拉斯维加斯国际汽车零配件及售
零欧电阻在电路设计中的使用技巧分享
bios与cmos区别是什么
python基础知识点(四)
中国移动针对移动转售业务批发价格下调的力度已达到60%-70%
华为P10青春lite阉割版:万年不变外观+麒麟650,惹怒网友!
松下4K一体化摄像机AW-UE83满足多种拍摄需求
随着本土FPGA开始崛起 FPGA领域终于迎来了中国军团
华为正式出售荣耀,30余家代理商接盘并发布联合声明
磁感应强度方向怎么判断
数据处理及互连芯片设计公司澜起科技发布2021年报
新企业能否让日本国产无人机实现逆袭?
如何用数字万用表巧判石英晶体质量
利用GSM网络技术和短信猫开发包实现移动购物系统的应用方案
边缘计算已成为了5G时代的核心技术之一
缓存系统的三座大山
MCU8051的泥石流—>RISCV32的商业启示
中国是全球最大新能源汽车市场,政策执行带动中国市场销量变化