Python工程师必考的6个经典面试题


Posted in Python onJune 28, 2020

第1题:Python里面如何实现tuple和list的转换?

函数tuple(seq)可以把所有可迭代的(iterable)序列转换成一个tuple, 元素不变,排序也不变

list转为tuple:

temp_list = [1,2,3,4,5]

将temp_list进行强制转换:tuple(temp_list)

确定是否转换成功:print(type(temp_list))

函数list(seq)可以把所有的序列和可迭代的对象转换成一个list,元素不变,排序也不变

tuple转为list:

temp_tuple = (1,2,3,4,5)

方法类似,也是进行强制转换即可:list(temp_tuple)

确定是否转换成功:print(type(temp_tuple))

第2题:Python里面search()和match()的区别?

它们两个都在re模块中

·match()函数是在string的开始位置匹配,如果不匹配,则返回None;

·search()会扫描整个string查找匹配;

match()

>>> import re
>>> print(re.match('hello','helloworld').span())  # 开头匹配到
(0, 5)
>>> print(re.match('hello','nicehelloworld').span()) # 开头没有匹配到
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    print(re.match('hello','nicehelloworld').span())
AttributeError: 'NoneType' object has no attribute 'span'
>>>

search()

>>> print(re.search('a','abc'))
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> print(re.search('a','bac').span())
(1, 2)
>>>

结论:match() 使用限制更多

第3题: 如何用Python删除一个文件?

os模块的使用

os.remove(path)

删除文件 path,删除时候如果path是一个目录, 抛出 OSError错误。如果要删除目录,请使用rmdir()。

remove() 同 unlink() 的功能是一样的

os.remove('a.txt')
os.removedirs(path)

递归地删除目录。类似于rmdir(), 如果子目录被成功删除, removedirs() 将会删除父目录;但子目录没有成功删除,将抛出错误。

例如,os.removedirs(“a/b/c”) 将首先删除c目录,然后删除b和a,如果他们是空的话,则子目录不能成功删除,将抛出OSError异常

os.rmdir(path)

删除目录 path,要求path必须是个空目录,否则抛出OSError错误

第4题: is 和 == 的区别?

hon中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

id 身份标识,就是在内存中的地址

完整的举例

>>> a = 'hello'
>>> b = 'hello'
>>> print(a is b)
True
>>> print(a==b)
True
>>> a = 'hello world'
>>> b = 'hello world'
>>> print(a is b)
False
>>> print(a == b)
True
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> print(a is b)
False
>>> print(a == b)
True
>>> a = [1,2,3]
>>> b = a
>>> print(a is b)
True
>>> print(a == b)
True
>>>

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等

is也被叫做同一性运算符(对象标示符),这个运算符比较判断的是对象间的唯一身份标识,也就是id(内存中的地址)是否相同

我们在检查 a is b 的时候,其实相当于检查 id(a) == id(b)。而检查a == b 的时候,实际是调用了对象 a 的 __eq()__ 方法,a == b 相当于 a.__eq__(b)。

这里还有一个问题,为什么 a 和 b 都是 “hello” 的时候,a is b 返回True,而 a 和 b都是 “hello world” 的时候,a is b 返回False呢?

这是因为前一种情况下Python的字符串驻留机制起了作用。对于较小的字符串,为了提高系统性能Python会保留其值的一个副本,当创建新的字符串的时候直接指向该副本即可。

所以 “hello” 在内存中只有一个副本,a 和 b 的 id 值相同,而 “hello world” 是长字符串,不驻留内存,Python中各自创建了对象来表示 a 和 b,所以他们的值相同但 id 值不同。

试一下当a=247,b=247时它们的id还是否会相等。事实上Python 为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。而Python 对小整数的定义是 [-5, 257),只有数字在-5到256之间它们的id才会相等,超过了这个范围就不行了。

>>> a = 247
>>> b = 247
>>> print(a is b)
True
>>> a = 258
>>> b = 258
>>> print(a is b)
False
>>>

is 是检查两个对象是否指向同一块内存空间,而 == 是检查他们的值是否相等。is 比 == 更加严格。

第5题:a=1, b=2, 不用中间变量交换a和b的值?

方法一

>>> a = 5
>>> b = 6
>>> a = a+b
>>> b = a-b
>>> a = a-b

方法二

>>> a = a^b
>>> b = b^a
>>> a = a^b

方法三

a,b = b,a

第6题:说说你对zen of python的理解,你有什么办法看到它?

Python之禅

import this

试题扩展:

语言特性

1.谈谈对 Python 和其他语言的区别
2.简述解释型和编译型编程语言
3.Python 的解释器种类以及相关特点?
4.说说你知道的Python3 和 Python2 之间的区别?
5.Python3 和 Python2 中 int 和 long 区别?
6.xrange 和 range 的区别?

编码规范

7.什么是 PEP8?
8.了解 Python 之禅么?
9.了解 docstring 么?
10.了解类型注解么?
11.例举你知道 Python 对象的命名规范,例如方法或者类等
12.Python 中的注释有几种?
13.如何优雅的给一个函数加注释?
14.如何给变量加注释?
15.Python 代码缩进中是否支持 Tab 键和空格混用。
16.是否可以在一句 import 中导入多个库?
17.在给 Py 文件命名的时候需要注意什么?
18.例举几个规范 Python 代码风格的工具

到此这篇关于Python工程师必考的6个经典面试题的文章就介绍到这了,更多相关6个Python工程师必考的面试题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python批量重命名同一文件夹下文件的方法
May 25 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
Python装饰器基础详解
Mar 09 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
彻底理解Python list切片原理
Oct 27 Python
Python爬豆瓣电影实例
Feb 23 Python
selenium+python实现自动登录脚本
Apr 22 Python
python3中函数参数的四种简单用法
Jul 09 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
python实现文件批量编码转换及注意事项
Oct 14 Python
Python drop方法删除列之inplace参数实例
Jun 27 #Python
对python pandas中 inplace 参数的理解
Jun 27 #Python
浅谈PyTorch中in-place operation的含义
Jun 27 #Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 #Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 #Python
Pytorch 高效使用GPU的操作
Jun 27 #Python
Keras中的两种模型:Sequential和Model用法
Jun 27 #Python
You might like
PHP 数字左侧自动补0
2008/03/31 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
nodeJS微信分享
2017/12/20 NodeJs
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
详解Python爬虫的基本写法
2016/01/08 Python
python numpy元素的区间查找方法
2018/11/14 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
关工委先进个人事迹材料
2014/05/23 职场文书
经营目标管理责任书
2014/07/25 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
Golang数据类型和相互转换
2022/04/12 Golang