Python的函数参数传递
1 | 看两个如下例子,分析运行结果: |
Python中的元类(metaclass)
1 | 元类就是用来创建类的“东西”。你创建类就是为了创建类的实例对象,但是我们已经学习到了Python中的类也是对象。好吧,元类就是用来创建这些类(对象)的,元类就是类的类 |
@staticmethod和@classmethod
1 | Python其实有3个方法,即静态方法(staticmethod),类方法(classmethod)和实例方法,如下: |
类变量和实例变量
1 |
|
Python自省
1 | 这个也是python彪悍的特性. |
字典推导式
1 | 可能你见过列表推导时,却没有见过字典推导式,在2.7中才加入的: |
Python中单下划线和双下划线
1 | class MyClass(): |
字符串格式化:%和.format
1 | .format在许多方面看起来更便利.对于%最烦人的是它无法同时传递一个变量和元组.你可能会想下面的代码不会有什么问题: |
迭代器和生成器
1 | 在Python中,这种一边循环一边计算的机制,称为生成器:generator。 |
*args and **kwargs
1 | 用*args和**kwargs只是为了方便并没有强制使用它们. |
面向切面编程AOP和装饰器
1 | 这个AOP一听起来有点懵,同学面试的时候就被问懵了… |
鸭子类型
1 | “当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。” |
Python中重载
1 | 引自知乎:http://www.zhihu.com/question/20053359 |
新式类和旧式类
1 | 这个面试官问了,我说了老半天,不知道他问的真正意图是什么. |
__new__和__init__的区别
1 | 这个__new__确实很少见到,先做了解吧. |
单例模式
1 | # 这个绝对常考啊.绝对要记住1~2个方法,当时面试官是让手写的. |
Python中的作用域
1 | Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定的。 |
GIL线程全局锁
1 | 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程. |
协程
1 | 简单点说协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态. |
闭包
1 | 闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。 |
lambda函数
1 | 其实就是一个匿名函数,为什么叫lambda?因为和后面的函数式编程有关. |
Python函数式编程
1 | 这个需要适当的了解一下吧,毕竟函数式编程在Python中也做了引用. |
Python里的拷贝
1 | 引用和copy(),deepcopy()的区别 |
Python垃圾回收机制
1 | Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。 |
Python里面如何实现tuple和list的转换?
1 | 答:tuple,可以说是不可变的list,访问方式还是通过索引下标的方式。 |
Python的is
1 | is是对比地址,==是对比值 |
read,readline和readlines
1 | • read 读取整个文件 |
Python2和3的区别
1 | 大部分Python库都同时支持Python 2.7.x和3.x版本的,所以不论选择哪个版本都是可以的。但为了在使用Python时避开某些版本中一些常见的陷阱,或需要移植某个Python项目 |
到底什么是Python?你可以在回答中与其他技术进行对比
1 | 下面是一些关键点: |
“猴子补丁”(monkey patching)指的是什么?这种做法好吗?
1 | “猴子补丁”就是指,在函数或对象已经定义之后,再去改变它们的行为。 |
介绍一下except的用法和作用?
1 | try…except…except…[else…][finally…] |
Python中pass语句的作用是什么?
1 | 答:pass语句不会执行任何操作,一般作为占位符或者创建占位程序,whileFalse:pass |
38.介绍一下Python下range()函数的用法?
1 | 列出一组数据,经常用在for in range()循环中 |
如何用Python来进行查询和替换一个文本字符串?
1 | # 可以使用re模块中的sub()函数或者subn()函数来进行查询和替换, |
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别?
1 | 术语叫贪婪匹配( <.*> )和非贪婪匹配(<.*?> ) |
Python里面如何生成随机数?
1 | random模块 |
有没有一个工具可以帮助查找python的bug和进行静态的代码分析?
1 | PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 |
如何在一个function里面设置一个全局的变量?
1 | 答:解决方法是在function的开始插入一个global声明: |
单引号,双引号,三引号的区别
1 | 答:单引号和双引号是等效的,如果要换行,需要符号(\),三引号则可以直接换行,并且可以包含注释 |
Python和多线程(multi-threading)。这是个好主意码?列举一些让Python代码以并行方式运行的方法。
1 | Python并不支持真正意义上的多线程。Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意。Python中有一个被称为Global Interpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。经过GIL这一道关卡处理,会增加执行的开销。这意味着,如果你想提高代码的运行速度,使用threading包并不是一个很好的方法。 |