【面试宝典】深入Python高级:直戳痛点的题目演示(上)

news2024/11/24 22:50:45

目录

🍔 你知道深浅拷⻉的区别吗?

🍔 字典反转,列表反转的实现?                

🍔 装饰器是什么,什么场景⽤到装饰器,举个例⼦?

🍔 装饰器的实质是什么?

🍔 Python迭代器是什么?什么场景⽤到迭代器?举⼀个例⼦?

🍔 Python⽣成器是什么?什么场景⽤到迭代器?举⼀个例⼦?

🍔 Python多线程与多进程的区别是什么?

🍔 请写⼀段Python代码实现删除⼀个list⾥⾯的重复元素

🍔 请设计⼀个decorator,它可作⽤于任何函数上,并打印该函 数的执⾏时间。

🍔 装饰器的实质是什么?


🍔 你知道深浅拷⻉的区别吗?

  • 浅拷⻉: 拷⻉的是对象的引⽤,如果原对象改变,相应的拷⻉对象也会发⽣改变
  • 深拷⻉: 拷⻉对象中的每个元素,拷⻉对象和原有对象不在有关系,两个是独⽴的对象
  • 直接赋值:其实就是对象的引⽤(别名)。
  • 浅拷⻉(copy):拷⻉⽗对象,不会拷⻉对象的内部的⼦对象。
  • 深拷⻉(deepcopy): copy 模块的 deepcopy ⽅法,完全拷⻉了⽗对象及其⼦对象。

🍔 字典反转,列表反转的实现?                

  • 列表的反转:reversed 函数、sorted函数、切⽚技术、循环,递归,四种⽅式
  • 字典的反转:循环,推导式,压缩器三种⽅式 
列表反转:

字典反转: 

🍔 装饰器是什么,什么场景⽤到装饰器,举个例⼦?

装饰器(Decorator)是⼀种结构型设计模式,它可以动态地给⼀个对象添加额外的职责,同时⼜不改变其原有的接⼝和实现。通俗地说,就是通过组合的⽅式,为对象添加新的⾏为或特性。在Python语⾔中,装饰器是⼀种语法糖,可以通过定义函数或类来实现。装饰器可以⽤于很多场景。
场景举例:
1)⽇志记录:可以定义⼀个装饰器函数,⽤于在函数调⽤时记录⽇志信息,如函数的参数、返回值等。
2)性能分析:可以定义⼀个装饰器函数,⽤于在函数调⽤时计算函数的执⾏时间,以便进⾏性能优化。
3)权限校验:可以定义⼀个装饰器函数,⽤于在函数调⽤时进⾏⽤户权限校验,以确保只有具有相应权限的⽤户可以访问该函数。
下⾯是⼀个装饰器的例⼦,⽤于记录函数的执⾏时间:
import time
def time_it(func):
 def wrapper(*args, **kwargs):
 start_time = time.time()
 result = func(*args, **kwargs)
 end_time = time.time()
 print(f"函数 {func.__name__} 执⾏时间为:{end_time - start_time} 秒")
 return result
 return wrapper
@time_it
def my_function():
 time.sleep(2)
 print("Hello, World!")
my_function()
在这个例⼦中,我们定义了⼀个装饰器函数 time_it ,它接受⼀个函数作为参数,并返回⼀个新的函数 wrapper wrapper 函数可以记录函数执⾏前后的时间,并输出执⾏时间信息。在 my_function 函数前⾯加上 @time_it 装饰器,表示对 my_function 函数应⽤ time_it 装饰器。当调⽤ my_function 函数 时,实际上会调⽤被 time_it 装饰过的 wrapper 函数,从⽽记录函数的执⾏时间。

🍔 装饰器的实质是什么?

装饰器实质:装饰器是要把原来的函数装饰成新的函数,并且返回这个函数本身的⾼阶函数。

🍔 Python迭代器是什么?什么场景⽤到迭代器?举⼀个例⼦?

迭代器(Iterator)是⼀个可以迭代访问序列元素的对象。

迭代器对象实现了两个⽅法:

__iter__()和__next__()。
  • __iter__()⽅法返回迭代器对象本身
  • __next__()⽅法返回下⼀个元素。
迭代器常⽤于遍历序列、集合、字典等容器类型数据。
它的优点是可以惰性计算(lazy evaluation),即 只有在需要时才会计算,避免了⼀次性加载所有数据的开销,同时也可以节省内存空间。
使⽤迭代器通常有以下场景:
  • 遍历⼤量数据集合:当需要处理⼤量的数据集合时,使⽤迭代器可以避免⼀次性加载所有数据,节省 内存空间。
  • 实现⾃定义迭代器:当需要遍历⾃定义数据结构时,可以通过实现迭代器对象的__iter__()和 __next__()⽅法来实现⾃定义迭代器。
  • 实现惰性计算:当需要进⾏惰性计算时,可以使⽤迭代器来实现,例如通过filter()、map()等⾼阶函 数返回⼀个迭代器对象来进⾏惰性计算。
下⾯是⼀个使⽤迭代器遍历列表的例⼦:
my_list = [1, 2, 3, 4, 5]
my_iterator = iter(my_list)
while True:
 try:
 item = next(my_iterator)
 print(item)
 except StopIteration:
 break
在这个例⼦中,我们通过 iter() 函数将列表 my_list 转化为⼀个迭代器对象 my_iterator ,然后使⽤ while 循 环和 next() 函数来依次访问迭代器中的元素。当所有元素都被访问完毕时,迭代器会抛出 StopIteration 异常,这时我们就可以跳出循环。

🍔 Python⽣成器是什么?什么场景⽤到迭代器?举⼀个例⼦?

⽣成器(Generator)是⼀种特殊的迭代器,它使⽤⽣成器函数来⽣成序列中的元素,⽽不 是在内存中⼀次性⽣成所有元素。
⽣成器函数是使⽤yield关键字定义的函数,每次调⽤⽣成器函数时,它会返回⼀个迭代器对象,调⽤ next()⽅法时,它会从上次暂停的位置继续执⾏,直到遇到下⼀个yield语句,然后返回⼀个值,并再次暂 停。因此,⽣成器可以惰性地⽣成序列中的元素,并在需要时逐个⽣成元素,避免了⼀次性⽣成所有元 素所带来的内存消耗。
使⽤⽣成器的场景包括:
  • ⽣成⼤量的数据集合:当需要⽣成⼤量数据时,使⽤⽣成器可以避免⼀次性占⽤⼤量内存空间。
  • 实现⾃定义的迭代器:当需要⾃定义迭代器对象时,可以使⽤⽣成器函数来实现,避免了繁琐的迭代 器对象的定义。
  • 实现惰性计算:当需要进⾏惰性计算时,可以使⽤⽣成器来实现,例如通过filter()、map()等⾼阶函 数返回⼀个⽣成器对象来进⾏惰性计算。
下⾯是⼀个使⽤⽣成器函数⽣成斐波那契数列的例⼦:

def fibonacci(n):
 a, b = 0, 1
 for i in range(n):
 yield a
 a, b = b, a + b
fib = fibonacci(10)
for num in fib:
print(num)
在这个例⼦中,我们定义了⼀个⽣成器函数 fibonacci() ,它的参数 n 表示需要⽣成的斐波那契数列的⻓度。在函数中,我们使⽤ yield 语句返回斐波那契数列中的每⼀个元素,这样每次调⽤ next() 函数时,它会返回下⼀个元素,并在下次调⽤时从上次暂停的位置继续执⾏。最后,我们使⽤ for 循环遍历⽣成器对象,并打印出每个元素。

🍔 Python多线程与多进程的区别是什么?

  • 在UNIX平台上,当某个进程终结之后,该进程需要被其⽗进程调⽤wait,否则进程成为僵⼫进程 (Zombie)。
  • 所以,有必要对每个Process对象调⽤join()⽅法 (实际上等同于wait)。对于多线程来说, 由 于只有⼀个进程,所以不存在此必要性。
  • 多进程应该避免共享资源。在多线程中,我们可以⽐较容易地共享资源,⽐如使⽤全局变量或者传 递参 数。在多进程情况下,由于每个进程有⾃⼰独⽴的内存空间,以上⽅法并不合适。
  • 此时我们可 以通过共 享内存和Manager的⽅法来共享资源。但这样做提⾼了程序的复杂度,并因为同步的需要⽽降低了程序的效率。

🍔 请写⼀段Python代码实现删除⼀个list⾥⾯的重复元素

主要⽤到了set()函数。

l = [1,1,2,3,4,5,4]
>>> list(set(l))
>>> [1, 2,3,4,5]

代码演示:

mylist=[1,1,2,3,4,5,4]
d = {}
for x in mylist:
d[x] = 1
mylist = list(d.keys())
print(mylist)

🍔 请设计⼀个decorator,它可作⽤于任何函数上,并打印该函 数的执⾏时间。

# -*- coding: utf-8 -*-
import time, functoolsdef metric(fn):
 @functools.wraps(fn)
 def wrapper(*args, **kw):
 time0 = time.time()
 ret = fn(*args, **kw)
 time1 = time.time()
 print('%s executed in %s ms' % (fn.__name__, time1-time0))
 return ret
 return wrapper

🍔 装饰器的实质是什么?

或者说为什么装饰器要写2层嵌套函数,⾥层函数完全就已经实现了装饰的功能为什么不直接⽤⾥层函数名作为装饰器名称?

答:装饰器是要把原来的函数装饰成新的函数,并且返回这个函数本身的⾼阶函数

💘若能为您的学习之旅添一丝光亮,不胜荣幸💘

🐼期待您的宝贵意见,让我们共同进步共同成长🐼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定时关机(python)

内容 为了更简单地实现定时关机,不必去记繁琐的命令行,于是搞了一个gui出来 基于python和Windows命令行实现,核心为: shutdown -s -t 60 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name autoShutdown…

【教学类-36-10】20241010职业抽卡(midjounery-niji)(涂色、裁剪、游戏)

背景需求 昨天在户外玩了角色游戏,受道具所限(只有烧烤做饭锅子材料),所有的孩子都只玩了烧烤店、娃娃家做饭的内容,扮演的都是爸妈、厨师等工作 今天从以前的纸类学具中找出一套数量相对较多的“职业涂色卡” 学具代…

2024中国新媒体技术展 | 蓝海创意云vLive虚拟直播即将亮相!

​​ 2024中国新媒体大会由中央宣传部指导,中华全国新闻工作者协会、湖南省人民政府联合主办,旨在推动媒体深度融合发展,促进新闻事业高质量发展,为中国式现代化贡献力量。中国新媒体技术展(CMTE)是中国新…

设计模式、系统设计 record part05

行为型模式 模板方法模式、解释器模式是类型为模式, 模板方法模式 模板方法(Template Method) 抽象类(Abstract Class) 抽象方法(Abstract Method) 具体方法(Concrete Method&#x…

详细解读“霸王面”战术

“霸王面”战术是指在没有得到雇主面试通知的情况下,强行加入面试,以此争取工作机会的求职策略。以下将以3000字左右的篇幅,通过生动形象的例子详细解释这一战术。 一、背景介绍 在当今竞争激烈的就业市场中,求职者需要经历网申…

2.1 App测试与发布指南

欢迎大家订阅【软件测试】 专栏,开启你的软件测试学习之旅! 文章目录 前言1 系统架构2 APP测试范围3 APP发布流程4 发布策略 前言 在当今数字化时代,移动应用程序(APP)和Web应用程序是两种主要的软件交付方式。本文详…

arm imx6ull docker启动失败问题查找与解决 内核配置相关

1、增加POSIX Message qeue:could not get initial namespace: no such file or directory CONFIG_POSIX_MQUEUEy 2、增加namespace failed to set to initial namespace CONFIG_NAMESPACESy 3、创建网络失败,veth配置:docker create endp…

40条经典ChatGPT论文指令,圈定选题和进行论文构思

目录 1、用ChatGPT圈定选题范围2、用ChatGPT生成研究方法和思路3、用ChatGPT扩展论文观点和论证4、用ChatGPT辅助论文结构设计5、如何直接使用ChatGPT4o、o1、OpenAI Canvas6、OpenAI Canvas增强了啥?7、编程功能增强 👇 ChatGPT o1网页入口在文末&#…

光路科技TSN交换机:驱动自动驾驶技术革新,保障高精度实时数据传输

自动驾驶技术正快速演进,对实时数据处理能力的需求激增。光路科技推出的TSN(时间敏感网络)交换机,在比亚迪最新车型中的成功应用,显著推动了这一领域的技术进步。 自动驾驶技术面临的挑战 自动驾驶系统需整合来自雷达…

CentOS系统解压缩.7z后缀的文件

先安装工具 sudo yum install p7zip p7zip-plugins 解压缩 7z x mvtec3d.7z x参数表示解压并保持原有目录结构。 有报错 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (localeen_US.UTF-8,Utf16on,HugeFileson,64 bits,64 CP…

马志威新剧《黑色月光》开播 “海王”梁正贤角色再升级

由优酷、TVB联合出品,77工作室制作的《黑色月光》于10月9日在优酷视频上线播出。该剧由知名导演钟澍佳担任总监制,杨茜尧、马志威等TVB演员主演,故事以公关行业为背景,讲述了职场女性余满月曾被富豪蒋家害得家破人亡,精…

C++ 算法学习——1.8 单调队列算法

单调队列(Monotonic Queue)是一种特殊类型的队列,通常用于解决一些数组或序列相关的问题。和单调栈类似,单调队列也具有一些特定的性质,在解决一些问题时非常有用。以下是关于单调队列的一些重要点: 定义&a…

《14天从0到1学Java》第二天之01Java中的分支结构if语句

Hello,大家好,我是Feri,一枚十多年的程序员,研究生,关注我,且看一个平凡的程序员如何在自我成长,也为各位小伙伴提供编程相关干货知识,希望在自我蜕变的路上,我们一起努力…

解决SqlServer自增主键使用MybatisPlus批量插入报错问题

报错 SqlServer 表中主键设置为自增,会报以下错误。 org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获…

深入理解HTTP Cookie

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 HTTP Cookie定义工作原理分类安全性用途 认识 cookie基本格式实验测试 cookie 当我们登录了B站过后,为什么下次访问B站就…

uni-app使用v-show编译成微信小程序的问题

问题 在uni-app使用v-show语法编译成微信小程序会有一个问题 当我们设置成v-show"false" 在Hbuilder X里面确实没有显示 然后运行到 微信开发程序里面 发现显示了出来,说明设置的 v-show"false"没有起作用 解决办法 首先去uniapp官网查看v…

KDTS 实现MySQL至KingbaseES迁移实践

此文章以linux环境实践,KingbaseES一下使用KES代替。 KDTS KDTS工具安装KES时会一起安装,一般存在目录为:ClientTools目录下guitools文件夹中 启动 进入KDTS-WEB下bin目录,执行sh文件 cd /opt/Kingbase/ES/V8/ClientTools/guit…

汽车胶黏剂市场研究:预计2030年全球市场规模将达到67.4亿美元

汽车胶黏剂是指专门用于汽车制造和维修过程中,用于粘接、密封和固定各种汽车部件的化学材料。它们在汽车行业中扮演着关键角色,广泛应用于车身、内饰、玻璃、电子元件和其他组件的粘接与密封。汽车胶黏剂旨在提高汽车的结构强度、耐用性、密封性以及舒适…

【JS】浏览器切换标签页导致计时器不准

现有一段计时器代码 function count() {let n 0const timer setInterval(() > {console.log(n);if (n > 200) {clearInterval(timer)}n}, 10) } count()效果如下,当计时过程中切换标签页,定时器的时间会放缓,再次切回标签页后&#…

MMDetection研究-1.入门及框架

记录MMDetection研究过程 0.前言 参考: 1.MMDetection框架入门教程(完全版) 2. 1.框架概述 MMDetection是商汤和港中文大学针对目标检测任务推出的一个开源项目,它基于Pytorch实现了大量的目标检测算法,把数据集构建、模型搭建、训练策略等过程都封装成了一个个模块,…