Python180道面试题 [70:91]高级特性

高级特性

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 替换为 100
89.正则表达式匹配中(. )和(.?)匹配区别?
90.写一段匹配邮箱的正则表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值