python面试题No4
1. python 中 match 与 search 的区别 ?
match() 函数只检测RE是不是在string的开始位置匹配, 只有在开始位置匹配成功的话才会返回, 否则返回None .
search()函数会在整个string内查找匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None .
2. python匹配HTML tag时, < .* > 和 < .*? > 有什么区别 ?
< .* > 贪婪匹配. 从第一个" < " 开始 直到最后一个 " > " 中间所有的字符都会匹配到 包括 " < > " .
< .*? > 非贪婪匹配. 从第一个 " < " 开始 到遇到的第一个 " > " 结束匹配. so 中间字符都会匹配, 但是不会包含 " < > " .
3.什么是lambda函数?它的好处是什么?
lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda函数:首要用途是指点短小的回调函数。
lambda [arguments] : expression
>>> a=lambda x,y : x+y
>>> a(3,11)
4. 谈谈 对 python GIL锁 的理解 ?
GIL 锁,全局解释器锁,作用就是,限制多线程同时执行,保证同一时间内只有一个线程在执行。
线程非独立的,所以同一进程里线程是数据共享,当各个线程访问数据资源时会出现竞状态,即数据可能会同时被多个线程占用,造成数据混乱,这就是线程的不安全。
所以引进了互斥锁,确保某段关键代码、共享数据只能由一个线程从头到尾完整地执行,但这个有个致命问题,死锁。
死锁:若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果谁也不愿意先解锁,互相等待,程序无法执行下去,这就是死锁。
注: 需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。像 JPython 就没有GIL。然而因为CPython是大部分环境下默认的Python执行环境。所以在很多人的概念里CPython就是Python,也就想当然的把GIL归结为Python语言的缺陷。所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL。
https://blog.csdn.net/Com_ma/article/details/79169848