Python面试十问

news/2024/12/22 14:26:55/

a9868a9756cb4d63a6674550c3b372aa.png

深浅拷贝的区别?

浅拷⻉: 拷⻉的是对象的引⽤,如果原对象改变,相应的拷⻉对象也会发⽣改变。

深拷⻉: 拷⻉对象中的每个元素,拷⻉对象和原有对象不在有关系,两个是独⽴的对象。

浅拷⻉(copy):拷⻉⽗对象,不会拷⻉对象的内部的⼦对象。

深拷⻉(deepcopy): copy 模块的 deepcopy ⽅法,完全拷⻉了⽗对象及其⼦对象。

装饰器及其应用场景?

装饰器(Decorator)是⼀种结构型设计模式,它可以动态地给⼀个对象添加额外的职责,同时⼜不改变其原有的接⼝和实现。通俗地说,就是通过组合的⽅式,为对象添加新的⾏为或特性。

  • ⽇志记录:可以定义⼀个装饰器函数,⽤于在函数调⽤时记录⽇志信息,如函数的参数、返回值等。
  • 性能分析:可以定义⼀个装饰器函数,⽤于在函数调⽤时计算函数的执⾏时间,以便进⾏性能优化。
python">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 resultreturn 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迭代器及场景?

Python中的迭代器是一个可以记住遍历的位置的对象,它实现了两个方法:__iter__()__next__()__iter__() 方法返回迭代器对象本身,__next__() 方法返回容器中的下一个值。当没有更多的元素时,__next__() 方法会抛出 StopIteration 异常。

迭代器常⽤于遍历序列、集合、字典等容器类型数据。它的优点是可以惰性计算,只有在需要时才会计算,避免了⼀次性加载所有数据的开销,同时也可以节省内存空间。

例⼦:

python">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

Python⽣成器是什么

在Python中,⽣成器(Generator)是⼀种特殊的迭代器,它使⽤⽣成器函数来⽣成序列中的元素,⽽不是在内存中⼀次性⽣成所有元素。

 ⽣成器函数是使⽤yield关键字定义的函数,每次调⽤⽣成器函数时,它会返回⼀个迭代器对象,调⽤next()⽅法时,它会从上次暂停的位置继续执⾏,直到遇到下⼀个yield语句,然后返回⼀个值,并再次暂停。 

python">def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + bfib = fibonacci()
for i in range(10):print(next(fib))

Python多线程与多进程的区别

多线程中的多个线程共享同一个进程的内存空间,因此它们可以访问相同的变量和数据结构。这意味着线程之间的数据共享和通信比较容易,但也可能导致竞争条件和线程安全问题。相反,多进程中的每个进程有自己的独立内存空间,进程间的数据共享需要借助于进程间通信(IPC)机制,如管道、队列或共享内存等。创建和管理线程的开销通常小于进程,因为进程间的独立性使得它们需要更多的资源来维护。然而,由于线程之间共享内存,同步和协调线程的操作可能比在进程之间进行通信更复杂。

*args和**kwarg作⽤

*args代表位置参数,它会接收任意多个参数并把这些参数作为元组传递给函数。**kwargs代表的关键字参数,允许你使⽤没有事先定义的参数名。位置参数⼀定要放在关键字参数的前⾯

is和==的区别

==是python标准操作符中的⽐较操作符,⽤来⽐较判断两个对象的value(值)是否相等(布尔计算);

is:用于判断两个变量是否引用自相同的对象,即它们在内存中的地址是否相同。当使用 is 进行比较时,只有当两个变量指向同一个内存地址时,结果才为 True

Python垃圾回收机制

  • 每个对象都有一个引用计数,当引用计数变为0时,对象会被立即回收。
  • 对于一组对象互相引用形成闭环的情况,Python会定期检查并回收这些无法通过简单引用计数回收的对象。
  • Python对每一代采用不同的回收策略,通常年轻代的对象更频繁地进行垃圾回收。

http://www.ppmy.cn/news/1424206.html

相关文章

Ubuntu22.04搭建CLion C++开发环境

Ubuntu22.04搭建CLion C开发环境 文章目录 Ubuntu22.04搭建CLion C开发环境1.首先下载CLion2.配置c环境3.创建快捷方式Reference 1.首先下载CLion 进入官网https://www.jetbrains.com/clion/download/#sectionlinux 然后进入自己存放这个压缩包的路径中, sudo mkd…

通过实例学C#之Math类

常用方法 Abs(Int16) 返回参数的绝对值。 static void Main(string[] args) {int num1 -10;Console.WriteLine(Math.Abs(num1));Console.ReadKey(); }运行结果: 10 Acos(Double)与Cos(Double) Acos(Double):返回参数的反余弦值。 Cos(Doub…

网络安全之反弹Shell

网络安全之反弹Shell 在网络安全和渗透测试领域,“正向Shell”(Forward Shell)和"反向Shell"(Reverse Shell)是两种常用的技术手段,用于建立远程访问目标计算机的会话。这两种技术都可以让攻击者…

【个人博客搭建】(3)添加SqlSugar ORM 以及Json配置文件读取

1、安装sqlsugar。在models下的依赖项那右击选择管理Nuget程序包,输入sqlsugarcore(因为我们用的是netcore,而不是net famework所以也对应sqlsugarcore),出来的第一个就是了,然后点击选择版本,一…

springboot结合vue实现文件上传下载功能

紧接着上一次的博客,这次来实现一下文件(主要是图片)的上传和下载功能,上一次的博客如下所示: Springboot集成JWT token实现权限验证-CSDN博客 其实文件的上传和下载功能(后端的部分),在我之前的博客就已经有写了,所以…

React + 项目(从基础到实战) -- 第七期

使用ant design 表单组件,开发登录,注册,搜索功能 React 表单组件 ,受控组件 案列 使用defaultVlue属性 bug : 改变了数据源,但是页面未重新渲染 {/* 表单组件 */}<button onClick{()>{console.log(text);}}>打印</button><button onClick{()>[setText(&…

Ubuntu快捷安装MySQL

更新包列表 sudo apt update 安装mysql sudo apt install mysql-server 启动mysql // 启动mysql sudo service mysql start// 关闭mysql sudo service mysql stop// 重启mysql sudo service mysql restart 连接mysql // 初始安装无密码&#xff0c;直接连接即可&#xf…

CSS3 动画

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍CSS3 动画&#x1f48e;1 什么是帧动画&#x1f48e;2 定义关键帧&#x1f…