高级特性
70.函数装饰器有什么作用?请列举说明?
装饰器主要是在不修改代码前提下进行功能的扩展,满足面向对象的“开闭原则”。
应用场景:
1,引入日志
2,函数执行时间统计
3,执行函数前预备处理
4,执行函数后清理功能
5,权限校验等场景
6,缓存
7,事务处理
71.Python 垃圾回收机制?
- 整数
小整数:Python 对小整数的定义是 [-5, 257) 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,所有位于这个范围内的整数使用的都是同一个对象。单个字母同样也是如此。
大整数:每一个大整数的创建均在内存中会分配一个内存空间,所以大整数的内存空间是需要被回收的。
引用计数为主,标记清除和分代回收为辅:
- 引用计数:
Python里每一个东西都是对象,它们的核心就是一个结构体:PyObject
PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少。
当引用计数为0时,该对象生命就结束了。
- 标记清除
『标记清除(Mark—Sweep)』算法是一种基于追踪回收(tracing GC)技术实现的垃圾回收算法。它分为两个阶段:第一阶段是标记阶段,GC会把所有的『活动对象』打上标记,第二阶段是把那些没有标记的对象**『非活动对象』进行回收**。从GCROOT出发,标记所有的可达对象,不可达的就清除掉。
标记清除算法作为Python的辅助垃圾收集技术主要处理的是一些容器对象,比如list、dict、tuple,instance等,因为对于字符串、数值对象是不可能造成循环引用问题。
- 分代回收
72.魔法函数 __call__怎么使用?
__call__允许一个类的实例像函数一样被调用
class Entity(object):
def __init__(self, size, x, y):
self.x, self.y = x, y
self.size = size
def __call__(self, x, y):
# 改变实例属性
self.x, self.y = x, y
if __name__ == '__main__':
# 创建实例
demo_obj = Entity(1, 2, 3)
# 实例可以像函数那样执行,并传入x y值,修改对象的x y
demo_obj(4, 5)
73.如何判断一个对象是函数还是方法?
在类外声明def为函数
类中声明def:使用类调用为函数,使用实例化对象调用为方法
可以使用isinstance()判断
from types import FunctionType, MethodType
class DemoClass(object):
def __init__(self):
pass
def run_method(self):
pass
def demo_func():
pass
if __name__ == '__main__':
demo = DemoClass()
print(isinstance(demo.run_method, FunctionType)) # False
print(isinstance(demo.run_method, MethodType)) # True
74.@classmethod 和@staticmethod 用法和区别
@classmethod 是类方法:访问和修改类属性,进行类相关的操作,通过类或示例对象调用,需要传递cls类对象为参数;
@staticmethod 是静态方法:不访问类属性和实例属性,通过类或实例调用,相当于一个普通函数。
75.Python 中的接口如何实现?
类定义接口、函数定义接口
76.Python 中的反射了解么?
计算机中的反射,是在运行的时候来自我检查,并对内部成员进行操作。
就是说这个变量的类型可以动态的改变,在运行的时候确定它的作用。
在Python中,能够通过一个对象,找出其type、class、attribute或method的能力,称为反射或自省。
具有反射能力的函数有type(),isinstance(),callable().dir().getattr()等
77.metaclass 作用?以及应用场景?78.hasattr() getattr() setattr()的用法79.请列举你知道的 Python 的魔法方法及用途。80.如何知道一个 Python 对象的类型?81.Python 的传参是传值还是传址?82.Python 中的元类(metaclass)使用举例83.简述 any()和 all()方法84.filter 方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]85.什么是猴子补丁?86.在 Python 中是如何管理内存的?87.当退出 Python 时是否释放所有内存分配?
正则表达式
88.使用正则表达式匹配出
百度一下,你就知道
中的地址 a=“张明 98 分”,用 re.sub,将 98 替换为 10089.正则表达式匹配中(. )和(.?)匹配区别?
90.写一段匹配邮箱的正则表达式