2019年,Python工程师必考的6个面试题,Python面试题No5

栏目: Python · 发布时间: 6年前

内容简介:函数list转为tuple:将temp_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()
search()

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 目录,然后再删除 ba , 如果他们是空的话,则子目录不能成功删除,将抛出 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 
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Shallows

The Shallows

Nicholas Carr / W. W. Norton & Company / 2010-6-15 / USD 26.95

"Is Google making us stupid?" When Nicholas Carr posed that question, in a celebrated Atlantic Monthly cover story, he tapped into a well of anxiety about how the Internet is changing us. He also crys......一起来看看 《The Shallows》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具