python面试48题(附答案):语言特性与数据类型篇

本文内容均收集自互联网,并对内容不恰当地方进行适当修改。更多请访问从今天开始种树

正文

1. 谈谈对 Python 和其他语言的区别

答:Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库,它是一门强类型的可移植、可扩展,可嵌入的解释型编程语言,属于动态语言。拿 C 语言和 Python 比: Python 的第三方类库比较齐全并且使用简洁,很少代码就能实现一些功能,如果用 C 去实现相同的功能可能就比较复杂。但是对于速度来说 Python 的运行速度相较于 C 就比较慢了。

2. 简述解释型和编译型编程语言

答:解释型语言是在运行程序的时候才翻译,每执行一次,要翻译一次,效率较低。 编译型就是直接编译成计算机可以执行的,只翻译一次,所以效率相对来说较高。

3. Python 的解释器种类以及相关特点?

答:CPython c 语言开发的,使用最广的解释器
IPython 基于 cPython 之上的一个交互式计时器,交互方式增强功能和 cPython 一样
PyPy 目标是执行效率,采用 JIT 技术。对 Python 代码进行动态编译,提高执行效率
JPython 运行在 Java 上的解释器,直接把 Python 代码编译成 Java 字节码执行
IronPython 运行在微软 .NET 平台上的解释器,把 Python 编译成 . NET 的字节码。

4. Python3 和 Python2 的区别?

printPython3 中是函数必须加括号,Python2 中 printclass
Python2 中使用 xrange,Python3 使用 range
Python2 中默认的字符串类型默认是 ASCII,Python3 中默认的字符串类型是 Unicode
Python2 中/的结果是整型,Python3 中是浮点类型。
Python2 中声明元类:metaclass= MetaClass,Python3`中声明元类:

class some(metaclass=MetaClass)pass

5. Python3 和 Python2 中 int 和 long 区别?

答:Python2 有 intlong 类型。int 类型最大值不能超过 sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个来定义长整型,显然,它比 int 类型表示的数字范围更大。在 Python3 里,只有一种整数类型 int,大多数情况下,和 Python2中的长整型类似。

6. xrange 和 range 的区别?

答:xrange 是在 Python2 中的用法,Python3 中只有 range xrange 用法与 range 完全相同,所不同的是生成的不是一个 list 对象,而是一个生成器。

7. 什么是 PEP8?

答:PEP8 通常会听别人提到,但是具体的指什么内容呢,简单介绍下。 《Python Enhancement Proposal #8》(8 号 Python 增强提案)又叫 PEP8,他针对的 Python 代码格式而编订的风格指南。

8. 了解 Python 之禅么?

答:通过 import this 语句可以获取其具体的内容。它告诉大家如何写出高效整洁的代码。

9. 了解 DocStrings 么?

答:DocStrings 文档字符串是一个重要工具,用于解释文档程序,帮助你的程序文档更加简单易懂。主要是解释代码作用的。

10. 了解类型注解么?

答:PEP 484 引入了类型提示,这使得可以对 Python 代码进行静态类型检查。 在使用 Ide 的时候可以获取到参数的类型,更方便传入参数。使用格式如下

def foo(num: int) -> None:
    print(f"接收到的数字是:{num}")

介绍下这个简单例子,我们可以在函数的参数部分使用参数名+:+类型,来指定参数可以接受的类型,这里的话就是 num 参数为 int 类型,然后后面->接的是返回值的类型。这里返回值为 None,然后通过 fstring 格式化字符串输出传入的数字。

11. 例举你知道 Python 对象的命名规范,例如方法或者类等

答:类:总是使用首字母大写单词串,如 MyClass。内部类可以使用额外的前导下划线。 变量:小写,由下划线连接各个单词。方法名类似 常量:常量名所有字母大写 等

12. Python 中的注释有几种?

答:总体来说分为两种,单行注释和多行注释。
单行注释在行首是 #。
多行注释可以使用三个单引号或三个双引号,包括要注释的内容。

13. 如何优雅的给一个函数加注释?

答:可以使用 docstring 配合类型注解

14. 如何给变量加注释?

答:可以通过变量名:类型的方式如下

a:str = "this is string type"

15. Python 代码缩进中是否支持 Tab 键和空格混用。

答:不允许 tab 键和空格键混用,这种现象在使用 sublime 的时候尤为明显。
一般推荐使用 4 个空格替代 tab 键。

16. 是否可以在一句 import 中导入多个库?

答:可以是可以,但是不推荐。因为一次导入多个模块可读性不是很好,所以一行导入一个模块会比较好。同样的尽量少用 from modulename import *,因为判断某个函数或者属性的来源有些困难,不方便调试,可读性也降低了。

17. 在给 Py 文件命名的时候需要注意什么?

答:给文件命名的时候不要和标准库库的一些模块重复,比如 abc。 另外要名字要有意义,不建议数字开头或者中文命名。

18. 例举几个规范 Python 代码风格的工具

答:pylintflake8

19. 列举 Python 中的基本数据类型?

答: Python3 中有六个标准的数据类型:字符串(String)、数字(Digit)、列表(List)、元组(Tuple)、集合(Sets)、字典(Dictionary)。

20. 如何区别可变数据类型和不可变数据类型

答: 从对象内存地址方向来说
可变数据类型:在内存地址不变的情况下,值可改变(列表和字典是可变类型,但是字典中的 key 值必须是不可变类型)
不可变数据类型:内存改变,值也跟着改变。(数字,字符串,布尔类型,都是不可变类型)可以通过 id() 方法进行内存地址的检测。

21. 将”hello world”转换为首字母大写”Hello World”

答: 这个得看清题目是要求两个单词首字母都要大写,如果只是第一个单词首字母大小的话,只使用 capitalize 即可,但是这里是两个单词,所以用下面的方法。

"hello world".title()

22. 如何检测字符串中只含有数字?

答:可以通过 isdigit() 方法,例子如下

s1 = "12223".isdigit()
print(s1)

s2 = "12223a".isdigit()
print(s2)

#结果如下:
#True
#False
  1. 将字符串”ilovechina”进行反转
    s1 = "ilovechina"[::-1]
    print(s1)

24. Python 中的字符串格式化方式你知道哪些?

答:%s,format,fstring(Python3.6 开始才支持,现在推荐的写法)

25. 有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。

答:因为题目要是写一个函数所以我们不能直接使用 strip(),不过我们可以把它封装到函数啊

def strip_function(s1)return s1.strip()

s1 = " adabdw "
print(strip_function(s1))

26. 获取字符串”123456“最后的两个字符。

答:切片使用的考察,最后两个即开始索引是 -2,代码如下

a = "123456"
print(a[-2::])

27. 一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?

a= "S".encode("gbk").decode("utf-8",'ignore')
print(a)

28. (1)s=”info:xiaoZhang 33 shandong”,用正则切分字符串输出[‘info’, ‘xiaoZhang’, ‘33’, ‘shandong’]。(2)a = “你好 中国 “,去除多余空格只留一个空格。

答:

(1)我们需要根据冒号或者空格切分

import re

s = "info:xiaoZhang 33 shandong"
res = re.split(r":| ", s)
print(res)

(2)

s = "你好     中国  "
print(" ".join(s.split()))

29. (1) 怎样将字符串转换为小写。 (2) 单引号、双引号、三引号的区别?

(1) 使用字符串的 lower() 方法。

(2)单独使用单引号和双引号没什么区别,但是如果引号里面还需要使用引号的时候,就需要这两个配合使用了,然后说三引号,同样的三引号也分为三单引号和三双引号,两个都可以声名长的字符串时候使用,如果使用 docstring 就需要使用三双引号。

30. 已知 AList = [1,2,3,1,2],对 AList 列表元素去重,写出具体过程。

list(set(AList))

31. 如何实现 “1,2,3” 变成 [“1”,”2”,”3”]

s = "1,2,3"
print(s.split(","))

32. 给定两个 list,A 和 B,找出相同元素和不同元素

A、B 中相同元素:print(set(A)&set(B))
A、B 中不同元素:print(set(A)^set(B))

33. [[1,2],[3,4],[5,6]] 一行代码展开该列表,得出 [1,2,3,4,5,6]

l = [[1,2],[3,4],[5,6]]
x=[j for i in l for j in i]  
print(x)

34. 合并列表 [1,5,7,9] 和 [2,2,6,8]

答:使用 extend 和 + 都可以。

a = [1,5,7,9]
b = [2,2,6,8]
a.extend(b)
print(a)

35. 如何打乱一个列表的元素?

import random

a = [1, 2, 3, 4, 5]
random.shuffle(a)
print(a)

36. 字典操作中 del 和 pop 有什么区别

答:del 可以根据索引(元素所在位置)来删除的,没有返回值。 pop 可以根据索引弹出一个值,然后可以接收它的返回值。

  1. 按照字典的内的年龄排序
d1 = [
    {'name''alice', 'age'38},
    {'name''bob', 'age'18},
    {'name''Carl', 'age'28},
]
print(sorted(d1, key=lambda x:x["age"]))

38. 请合并下面两个字典 a = {“A”:1,”B”:2},b = {“C”:3,”D”:4}

答: 合并字典方法很多,可以使用 a.update(b) 或者下面字典解包的方式

a = {"A"1,"B"2}
b = {"C"3,"D"4}
print({**a,**b})

39. 如何使用生成式的方式生成一个字典,写一段功能代码。

把字典的 key 和 value 值调换;
d = {'a''1', 'b''2'}
print({v:k for k,v in d.items()})

40. 如何把元组 (“a”,”b”) 和元组 (1,2),变为字典 {“a”:1,”b”:2}

zip 的使用,但是最后记得把 zip 对象再转换为字典。

a = ("a", "b")
b = (1, 2)
print(dict(zip(a, b)))

41. 下列字典对象键类型不正确的是?

A:{10,20,30}
B:{"a"0, "b"0, "c"0}
C: {(1,2)0, (2,3)0}
D: {[1,2]0, [2,3]0}

D 因为只有可 hash 的对象才能做字典的键,列表是可变类型不是可 hash 对象,所以不能用列表做为字典的键。

42. 如何交换字典 {“A”:1,”B”:2}的键和值

答:

s =  {"A"1,"B"2}
#方法一:
dict_new = {value:key for key,value in s.items()}
#方法二:
new_s= dict(zip(s.values(),s.keys()))

43. Python 里面如何实现 tuple 和 list 的转换?

答: Python 中的类型转换,一般通过类型强转即可完成 tuple 转 list 是 list() 方法 listtuple 使用 tuple() 方法

44. 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?

答: 这个题目考察了 Python 标准库的 itertools 模快的掌握情况,该模块提供了操作生成器的一些方法。 对于生成器类型我们使用 islice 方法来实现切片的功能。例子如下

from itertools import islice
gen = iter(range(10)) #iter()函数用来生成迭代器
#第一个参数是迭代器,第二个参数起始索引,第三个参数结束索引,不支持负数索引
for i in islice(gen,0,4)print(i)

45. 请将 [i for i in range(3)] 改成生成器

答:通过把列表生产式的中括号,改为小括号我们就实现了生产器的功能即,

(i for i in range(3))

46. a=”hello” 和 b=”你好” 编码成 bytes 类型

答: 这个题目一共三种方式,第一种是在字符串的前面加一个 b,第二种可以使用 bytes 方法,第三种使用字符串 encode 方法。具体代码如下,abc 代表三种情况

a = b"hello"
b = bytes("你好", "utf-8")
c = "你好".encode("utf-8")
print(a, b, c)

47. 下面的代码输出结果是什么?

a = (1,2,3,[4,5,6,7],8)
a[2] = 2

答: 我们知道元组里的元素是不能改变的所以这个题目的答案是出现异常。

48. 下面的代码输出的结果是什么?

a = (1,2,3,[4,5,6,7],8)
a[3][0] = 2

答:前面我说了元组的里元素是不能改变的,这句话严格来说是不准确的,如果元组里面元素本身就是可变类型,比如列表,那么在操作这个元素里的对象时,其内存地址也是不变的。a[3] 对应的元素是列表,然后对列表第一个元素赋值,所以最后的结果是: (1,2,3,[2,5,6,7],8)

未完待续

更多内容请关注从今天开始种树
关注知识图谱与大数据公众号,当然不关注也无所谓。
在这里插入图片描述


   转载规则


《python面试48题(附答案):语言特性与数据类型篇》 罗华 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
WEB开发、爬虫中常见HTTP状态码大全,绝对有你没见过的(建议收藏) WEB开发、爬虫中常见HTTP状态码大全,绝对有你没见过的(建议收藏)
http状态码不管在web开发和爬虫中都会遇到,故将各类状态码含义收集如下。更多爬虫内容请访问从今天开始种树 各大类含义http协议状态码一共有五种类别,分别是1XX,2XX,3XX,4XX,5XX。 1XX类状态码:临时的响应。客户端
2020-07-18
下一篇 
爬虫学习(5):Steam游戏账号PC端登录(登录篇一) 爬虫学习(5):Steam游戏账号PC端登录(登录篇一)
登录后才能获取数据也是现在反爬的一个重点,所以计划接下来的几期内容都是关于登录各大站点。由于js代码过长,所以只截取了部分,完整代码点击这里,直接拷贝运行即可。 啰嗦两句各大网站登录提交数据的方式不太 一样,有些只需要POST明文的账号
  目录