1. is 比较的是两个实例对象是否是彻底相同,它们是否是同一个对象,占用的内存地址是否相同python
== 比较的是两个对象的内容是否相等程序员
2.数据库
with语句时用于对try except finally 的优化,让代码更加美观,数组
例如经常使用的开发文件的操做,用try except finally 实现:安全
f=open('file_name','r') try: r=f.read() except: pass finally: f.close()
打开文件的时候,为了能正常释放文件的句柄,都要加个try,而后再finally里把f close掉,可是这样的代码不美观,finally就像个尾巴,一直托在后面,尤为是当try里面的语句时几十行多线程
用with的实现:函数
with open('file_name','r') as f: r=f.read()
这条语句就好简洁不少,当with里面的语句产生异常的话,也会正常关闭文件大数据
除了打开文件,with语句还能够用于哪些地方呢?优化
with只适用于上下文管理器的调用,除了文件外,with还支持 threading、decimal等模块,固然咱们也能够本身定义能够给with调用的上下文管理器spa
在开发的过程当中,会有不少对象在使用以后,是须要执行一条或多条语句来进行关闭,释放等操做的,例如上面说的的文件,还有数据库链接,锁的获取等,这些收尾的操做会让代码显得累赘,也会形成因为程序异常跳出后,没有执行到这些收尾操做,而致使一些系统的异常,还有就是不少程序员会忘记写上这些操做-_-!-_-!,为了不这些错误的产生,with语句就被生产出来了。with语句的做用就是让程序员不用写这些收尾的代码,而且即便程序异常也会执行到这些代码(finally的做用)
3.gil
GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所作的决定
在Python多线程下,每一个线程的执行方式:
1.获取GIL
2.执行代码直到sleep或者是python虚拟机将其挂起。
3.释放GIL
可见,某个线程想要执行,必须先拿到GIL,咱们能够把GIL看做是“通行证”,而且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不容许进入CPU执行。
4.list是可变数组
truple是常量数组
5.python的值是参数传递仍是引用传递
说传值或者传引用都不许确。非要安一个确切的叫法的话,叫传对象(call by object)
6.
Python 中的迭代器、生成器、装饰器
迭代器; 是什么:是一个抽象的概念,任何对象,若是它实现了next方法和iter方法,就是迭代器。
next方法要么返回迭代中的下一项,要么返回一个stapIteration异常,iter方法要返回一个迭代器对象,而它自己就是一个迭代器对象,全部返回本身自己。
做用:像咱们提供一个中间人即迭代器帮助咱们迭代遍历使用 for循环其实就实现了迭代器的功能,在遍历list,string,dict,tuple这些容器时,在 for语句对容器对象调用的iter()方法返回一个定义next()方法的迭代器对象,它在函数中逐个访问容器内的元素,next和iter都是python内置函数。
生成器: 是什么:生成器是一种特殊的迭代器,在函数中有yield关键字就能够说是生成器。 怎么用:调用next(),就会返回yield后面的值,生成器挂起,再次使用next就从上次中止的位置继续执行。 做用:延迟计算,一次返回一个结果。当咱们须要结果的时候才会调用,而不是一次返回全部的结果。 也就是说,它不会一次生成全部的结果,这对于大数据量处理,将会很是有用。 建立方法:1.把列表生成式的[ ]改成()就是一个简单的列表生成器 2.使用yield关键字
生成器和迭代器的区别:生成器能作到迭代器能作到的全部事,由于自动建立iter方法和next方法,显的比较简洁,高效。使用生成器表达式比列表解析要节省内存(前者是须要的时候才调用next返回一个值,后者直接返回一个列表),自动抛出StopIteration异常
装饰器:在不改变已存在的对象的功能状况下添加额外的功能 def set_fun(func): call_fun(*arge,**kwargs): reurn func(*arge,**kwargs) return call_fun