百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

秋招在即,值得收藏 |8道Python面试必知必会题

off999 2024-10-12 06:13 38 浏览 0 评论

原创: 大刘 来源:菜鸟学Python

求职季在即,技巧千万条,硬实力才是关键,听说今年大环境不好,更要好好准备才行。最近通过对往期笔试面试题目的梳理,精选了8道比较有代表性的考察python语言特性方面的题目,在此分享给大家,希望能在各位的求职路上给予一点帮助

01.迭代器和生成器

题目举例:将列表生成式中[]改成() 之后数据结构是否改变。

参考解析:这道题目的关键不在于其答案,而是背后的迭代器和生成器的概念。

  • 迭代器是遵循迭代协议的对象,用户可以使用 iter() 以从任何序列得到迭代器(如 list, tuple, dictionary, set 等)。
  • 生成器(Generator),只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)。

生成器能做到迭代器能做的所有事,而且因为自动创建iter()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常。

回到上面的问题,将列表生成式中[]改成() 之后数据结构是否改变呢?答案:是,因为从列表(迭代器)变为生成器,代码如下:



02.关于装饰器

题目举例:手写一个判断时间的装饰器。

参考解析:很明显,这道题目的考察重点是python的又一经典特性——装饰器。装饰器本质上是一个callable object,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能,其返回值也是一个函数的对象,经常用于有切面需求的场景,比如插入日志,性能测试,事务处理,缓存等等。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

对于上面这道题目,给出以下参考代码:



如果没有装饰器,执行test("backbp")的返回结果应该是Hello backbp, 2020 Happy,但是在函数timecheck中,我们对当前时间的年份进行了判断,相当于给test函数增加了额外的功能。结果很明显,今年是2019年而非2020,因此就得到了上面的输出结果。

03.猴子补丁

题目举例:Python中的猴子补丁是什么?

参考解析:猴子补丁仅指在运行时动态改变类或模块,即函数在python中可以像使用变量一样对它进行赋值等操作,为的是将第三方代码打补丁在不按预期运行的bug或者feature上,适用于python这种动态语言。

例如下面这段代码运行后会执行MyClass中的func函数。




现在我们在上面代码的基础上再添加两行代码:

MyClass.func = ClassName.monkey_func
obj.func()

再次执行会发现输出结果变为了'monkey_func',在这个过程中我们通过对MyClass.func重新赋值,动态的改变了输出的结果。

04.==和is

题目举例:说明Python中==和is的区别。

参考解析:is是判读对象标识符是否一致,而==是判读两个对象的内容是否相等!

  • x is y 相当于 id(x)==id(y)
  • ==是检查两个对象的内容是否相等,会调用对象的内部__eq__()。

例如下面这段代码,虽然a和b的值是相同的,但是二者是不同的两个对象,因此使用is比较得到的结果是False。




05.浅拷贝和深拷贝

题目举例:对python中的深拷贝和浅拷贝进行说明。

参考解析:Python中对象的赋值实际上是简单的对象引用,也就是说当你创建一个对象,然后把它赋值给另一个变量的时候,Python并没有拷贝这个对象,而是调用了这个对象。而真正的拷贝分为浅拷贝和深拷贝两种。

浅拷贝一般使用copy.copy(),可以进行对象的浅拷贝,但是不会拷贝对象内部的子对象。例如:



上面这段代码中,使用copy对origin进行浅拷贝,cop复制了origin的对象,但是cop里面的[3, 4]和origin里面的[3,4]其实都是指向同一块内存地址,所以改变了origin[2][0]之后,cop里面的内容也发生了改变!

深度拷贝需要用copy.deepcopy()进行,它会复制整个对象,以及它里面的所有子对象,例如:



当使用深度拷贝后,cop和origin已经是两个完全独立的对象,其中的元素及子元素都指向不同的内存地址,因此无论origin如何变化,cop都不会随之改变。

06.可变类型和不可变类型

题目举例:说明python中可变类型和不可变类型的区别,并举例。

参考解析:可变类型传递的是内存中的地址,也就是说当进行修改操作时,会直接修改内存中的值,并没有开辟新的内存,可变类型的代表有list,dict。例如:



在上这段代码中,我们对lst进行了append操作,虽然lst的值改变了,但是其内存地址并没有发生变化。

不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作,其代表有string,number,tuple。例如:



可见,对字符串s进行操作后,其内存地址也随之发生了改变。

07.Python的自省功能

题目举例:简要说明什么是python的自省特性。

参考解析:自省就是面向对象的语言所写的程序在运行时,能够知道对象的类型。简单一句就是运行时能够获得对象的类型,比如type()、dir()、getattr()、hasattr()、isinstance()等方法。

例如下面这段代码中,type函数返回的是变量的数据类型,isinstance判断变量(参数1)是否属于某数据类型(参数2),dir函数则会返回参数的属性、方法列表。




08.Python中的下划线

题目举例:对python中的三种下划线形态_foo、__foo、__foo__进行说明。

参考解析:python中不同的下划线组合具有不同的含义。

  • 前置单下划线形态_foo,这里的下划线是用来指定私有变量的一种方式,常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入。
  • 前置双下划线形态__foo,主要是为了区别和其他类相同的命名,避免该成员的名称与子类中的名称冲突。例如有有类class里有一成员 __x,那么 dir(class) 时会看到_Test__x而非__x。
  • 前后双下划线形态__foo__,定义的是Python 中的魔法对象,如类成员的__init__、__del__、__add__、__getitem__、全局的__file__、__name__等。

例如下面这段代码中,我们直接调取mc的__superprivate属性会提示MyClass这个类没有该属性,原因就是前置的双下划线对属性名称进行了限定。




上面就是关于Python语言特性方面的8道题目,也是必知必会的题目了!希望对要参加秋招的同学能有一点帮助!若有什么问题,欢迎留言吱一声!

最后,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。

相关推荐

大文件传不动?WinRAR/7-Zip 入门到高手,这 5 个技巧让你效率翻倍

“这200张照片怎么传给女儿?微信发不了,邮箱附件又超限……”62岁的张阿姨对着电脑犯愁时,儿子只用了3分钟就把照片压缩成一个文件,还教她:“以后用压缩软件,比打包行李还方便!”职场人更懂这...

电脑解压缩软件推荐——7-Zip:免费、高效、简洁的文件管理神器

在日常工作中,我们经常需要处理压缩文件。无论是下载软件包、接收文件,还是存储大量数据,压缩和解压缩文件都成为了我们日常操作的一部分。而说到压缩解压软件,7-Zip绝对是一个不可忽视的名字。今天,我就来...

设置了加密密码zip文件要如何打开?这几个方法可以试试~

Zip是一种常见的压缩格式文件,文件还可以设置密码保护。那设置了密码的Zip文件要如何打开呢?不清楚的小伙伴一起来看看吧。当我们知道密码想要打开带密码的Zip文件,我们需要用到适用于Zip格式的解压缩...

大文件想要传输成功,怎么把ZIP文件分卷压缩

不知道各位小伙伴有没有这样的烦恼,发送很大很大的压缩包会受到限制,为此,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置?方法一:使用7-Zip免费且强大的文件管理工具7...

高效处理 RAR 分卷压缩包:合并解压操作全攻略

在文件传输和存储过程中,当遇到大文件时,我们常常会使用分卷压缩的方式将其拆分成多个较小的压缩包,方便存储和传输。RAR作为一种常见的压缩格式,分卷压缩包的使用频率也很高。但很多人在拿到RAR分卷...

2个方法教你如何删除ZIP压缩包密码

zip压缩包设置了加密密码,每次解压文件都需要输入密码才能够顺利解压出文件,当压缩包文件不再需要加密的时候,大家肯定想删除压缩包密码,或是忘记了压缩包密码,想要通过删除操作将压缩包密码删除,就能够顺利...

速转!漏洞预警丨压缩软件Winrar目录穿越漏洞

WinRAR是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从Internet上下载的RAR、ZIP及其它类...

文件解压方法和工具分享_文件解压工具下载

压缩文件减少文件大小,降低文件失效的概率,总得来说好处很多。所以很多文件我们下载下来都是压缩软件,很多小伙伴不知道怎么解压,或者不知道什么工具更好,所以今天做了文件解压方法和工具的分享给大家。一、解压...

[python]《Python编程快速上手:让繁琐工作自动化》学习笔记3

1.组织文件笔记(第9章)(代码下载)1.1文件与文件路径通过importshutil调用shutil模块操作目录,shutil模块能够在Python程序中实现文件复制、移动、改名和删除;同时...

Python内置tarfile模块:读写 tar 归档文件详解

一、学习目标1.1学习目标掌握Python内置模块tarfile的核心功能,包括:理解tar归档文件的原理与常见压缩格式(gzip/bz2/lzma)掌握tar文件的读写操作(创建、解压、查看、过滤...

使用python展开tar包_python拓展

类Unix的系统,打包文件经常使用的就是tar包,结合zip工具,可以方便的打包并解压。在python的标准库里面有tarfile库,可以方便实现生成了展开tar包。使用这个库最大的好处,可能就在于不...

银狐钓鱼再升级:白文件脚本化实现GO语言后门持久驻留

近期,火绒威胁情报中心监测到一批相对更为活跃的“银狐”系列变种木马。火绒安全工程师第一时间获取样本并进行分析。分析发现,该样本通过阿里云存储桶下发恶意文件,采用AppDomainManager进行白利...

ZIP文件怎么打开?2个简单方法教你轻松搞定!

在日常工作和生活中,我们经常会遇到各种压缩文件,其中最常见的格式之一就是ZIP。ZIP文件通过压缩数据来减少文件大小,方便我们进行存储和传输。然而,对于初学者来说,如何打开ZIP文件可能会成为一个小小...

Ubuntu—解压多个zip压缩文件.zip .z01 .z02

方法将所有zip文件放在同一目录中:zip_file.z01,zip_file.z02,zip_file.z03,...,zip_file.zip。在Zip3.0版本及以上,使用下列命令:将所有zi...

如何使用7-Zip对文件进行加密压缩

7-Zip是一款开源的文件归档工具,支持多种压缩格式,并提供了对压缩文件进行加密的功能。使用7-Zip可以轻松创建和解压.7z、.zip等格式的压缩文件,并且可以通过设置密码来保护压缩包中的...

取消回复欢迎 发表评论: