1-面试题:python
- 列表和元组的区别
- 列表是动态的,长度可变,可以对元素进行增、删、改操作;列表存储空间略大于元组,性能略逊于元组;
- 元组是静态的,长度大小固定,不可以对元素进行增、删、改操作;元组相对于列表更加轻量级,性能稍优;
- 字典和集合
- 字典是有序的数据结构,而集合是无序的,其内部的哈希表存储结构,保证了其查找、插入、删除操作的高效性;
- 所以,字典和集合常用于元素的高效查找、去重等场景;
- 面向对象的封装、继承、多态
- 封装即类,一群有着相同属性和方法的对象的集合;
- init表示构造函数,即一个对象生成时会被自动调用的函数;
- 继承,一个类拥有另一个类的特征,也拥有不同于另一个类的独特特征;特征就是属性和方法;
- 多态,一类事物有多种形态,不同的子类对象调用相同的方法,产生不同的执行结果,以此增加代码的灵活度;
- 什么是装饰器和闭包
- 装饰器,通过装饰器函数,来修改原函数的一些功能,使得原函数不需要修改;常用于计算函数运行时间、计算函数运行次数、身份认证、日志记录、输入合理性检查以及缓存;
- 类别有:函数装饰器、类装饰器、装饰器可带参数、装饰器的嵌套
- 闭包:如果在一个内部函数里,对外部作用域的变量进行引用,那么内部函数就是闭包;满足闭包的条件,1、必须有一个内嵌函数;2、内函数必须引用外函数的变量;3、外函数必须返回内函数
-
//身份认证装饰器 import functools def authenticate(func): @functools.wraps(func) def wrapper(*args,**kwargs): requests = args[0] if check_user_logged_in(request): return func(*args,**kwargs) else: raise Exception('Authentication failed') return wrapper @authenticate def post_comment(request,...): ...
-
//日志记录装饰器 import time import functools def log_execution_time(func): @functools.wraps(func) def wrapper(*args,**kwargs): start = time.perf_counter() res = func(args,**kwargs) end = time.perf_counter() print('{} took {} ms'.format(func.__name__,(end-start)*1000)) return res return wrapper @log_execution_time def decorators(items): print(1) time.sleep(2.0) print(2) print(items) decorators()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理