1、is 和==的区别
- is
比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。 - ==
比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。
2、python判断None用is
- None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。
3、python 闭包
- 这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包。
- 闭包中的引用的自由变量只和具体的闭包有关联,闭包的每个实例引用的自由变量互不干扰。
- 一个闭包实例对其自由变量的修改会被传递到下一次该闭包实例的调用。
- 如果想要在内函数中修改外函数的值,需要使用 nonlocal 关键字声明变量
4、python多线程应用场景
- 多线程对于IO操作有用
5、linux配置ip
- vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 填写ip地址、子网掩码、网关
6、虚拟机配置网络
- 桥接:桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。
- NAT:NAT模式中,就是让虚拟机借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。NAT模式中,虚拟机的网卡和物理网卡的网络,不在同一个网络,虚拟机的网卡,是在vmware提供的一个虚拟网络。
7、python怎么创建虚拟环境?
8、内存管理
- 垃圾回收
- 引用计数
- 内存池机制
- 当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。
- 垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。
9、python协程
- Gevent是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet,它是以C扩展模块形式接入Python的轻量级协程。Greenlet全部运行在主程序操作系统进程的内部,但他们被协作式地调度。
10、动态导入模块
11、yield
12、python GIL
- CPython的GIL本意是用来保护所有全局的解释器和环境状态变量的,如果去掉GIL,就需要更多的更细粒度的锁对解释器的众多全局状态进行保护。或者采用Lock-Free算法。无论采用哪一种,要做到多线程安全都会比维系一个GIL要难得多。另外改动的还是CPython的代码树及其各种第三方扩展也在依赖GIL。
- 进一步说,有人做过测试将GIL去掉,加入更细粒度的锁。但是实践检测对单线程来说,性能更低。只有利用的物理cpu到一定数目后,性能才会比GIL版本好。且现在绝大部分的python程序都是单线程的。
13、pyc,pyo
- py是源文件,pyc是源文件编译后的文件,pyo是源文件优化编译后的文件,pyd是其他语言写的python库
- python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模块的加载速度提高了,并没有提高代码的执行速度,通常情况下不用主动去编译pyc文件,文档上说只要调用了import model那么model.py就会先编译成pyc然后加载。