python 经典面试题_最常见的36个Python面试题(Python面试题汇总一)

文章目录

1. Python 的特点和优点有什么

2. 深拷贝和浅拷贝的区别是什么

3. 列表和元祖有什么不同

4. 解释 Python中的三元表达式

5. Python 中如何实现多线程(待定)

6. 解释继承

7. 什么是 Flask

8. 如何在 Python 中管理内存

9. 解释 Python 中的 help 函数和 dir 函数

10. 当退出 Python 时是否释放所有内存分配

11. 什么是猴子补丁

12. 什么是 Python 字典

13. 能否解释一下 *args 和 **kwargs

14. 编程实现计算文件中的大写字母数

15. 什么是负索引

16. 如何随机打乱列表中元素,要求不引用额外的内存空间

17. 解释 Python 中的 join 和 split 函数

18. Python 区分大小写吗

19. Python 中标识符的命名规则

20. 如何删除字符串中的前置空格

21. 如何将字符串转换为大小写

22. Python 中的 pass 语句有什么作用

23. 请解释 Python 中的闭包

24. 解释 Python 中的//,%和**运算符

25. Python 中有多少种运算符,解释算术运算符

26. 解释 Python 中的关系运算符

27. 解释 Python 中的赋值和算数运算符

28. 解释 Python 中的逻辑运算符

29. 解释 Python 中的成员运算符

30. 解释 Python 中的身份运算符

31. 解释 Python 中的位运算符

32. 如何在 Python 使用多进制数字

33. 如何获取字典中的所有键

34. 为什么标志符不建议使用下划线开头

35. 如何声明多个变量并赋值

36. 什么是元组的解封装

1. Python 的特点和优点有什么

① Python是一种解释型语言;② 支持面向对象;③ 语法简洁;④ 开源;⑤ 有很多实用性很强的库(机器学习库、web开发库、科学计算库等),可以做很多事情。

2. 深拷贝和浅拷贝的区别是什么

① 遇到不可变类型,深浅拷贝都不会拷贝一份(不需要重新开辟内存是因为),用的都会是原来的那份(其实不应该是原来的那份,是由于python中小数据池的缘故);② 遇到可变类型,浅拷贝只拷贝第一层(需要开辟内存空间),里面的值都来自原来的那份。而深拷贝拷贝嵌套层次中的所有可变类型(第一层需要开辟内存空间,拷贝嵌套的可变类型也需要开辟内存空间),嵌套的可变类型里面的值来自原来的那份 。如果元组(不可变类型)中嵌套有可变类型的数据,浅拷贝不拷贝里面的值,用原来那份。但是深拷贝会把这个元组重新拷贝一份。深拷贝使用Python内置模块copy中的deepcopy方法,浅拷贝使用的是copy中的copy方法。

3. 列表和元祖有什么不同

列表(list)是可变类型,元组(tuple)是不可变类型。程序中可以通过指定列表和元组的下标修改列表和元组的值来验证。

数字、字符串、布尔和元组是不可变类型。列表、集合、字典是可变类型。这基本上是面试必问的问题。

4. 解释 Python中的三元表达式

Python的中三元表达式的语法是:[语句1] if [条件] else [语句2],如果条件是真,语句1部分被执行,否则语句2部分被执行。

其它语言,如 javascript 的三元表达式语法格式是:[条件]?[语句1]:[语句2],如果条件为真,则语句1被执行,条件为假则语句2被执行。

5. Python 中如何实现多线程(待定)

线程是轻量级的进程,多线程允许一次执行多个线程。众所周知,Python 是一种多线程语言,它有一个多线程包。 GIL(全局解释器锁)确保一次执行单个线程。一个线程保存 GIL 并在将其传递给下一个线程之前执行一些操作,这就产生了并行执行的错觉。但实际上,只是线程轮流在 CPU 上。当然,所有传递都会增加执行的开销。

6. 解释继承

继承是实现代码的复用。一个类可以继承另外一个类,被继承的类称为父类,继承的称为子类。面向对象里的继承也就是父类的相关的属性可以被子类重复使用,子类不必再在自己的类里面重新定义一回。需要用到的新的属性和方法时,子类也可以自己来扩展。增加了类的耦合性,使得代码更加规范化、合理化。继承使我们可以重用代码,并且还可以更方便地创建和维护代码。继承的分类有,① 单继承: 一个子类类继承自单个基类;② 多重继承:一个子类继承自多个基类;③多级继承:一个子类继承自一个基类,而基类继承自另一个基类;④ 分层继承:多个子类继承自同一个基类。

7. 什么是 Flask

Flask 是一个使用 Python 编写的轻量级 Web 应用框架,使用 BSD 授权。其 WSGI 工具箱采用 Werkzeug,模板引擎则使用 Jinja2。除了 Werkzeug 和 Jinja2 以外几乎不依赖任何外部库。Flask 的会话使用签名 cookie 来允许用户查看和修改会话内容。它会记录从一个请求到另一个请求的信息。但如果要修改会话,则必须有密钥 Flask.secret_key。

8. 如何在 Python 中管理内存

使用了① 对象的引用计数机制;② 垃圾回收机制;③ 内存池机制来管理内存的。

9. 解释 Python 中的 help 函数和 dir 函数

help函数返回帮助文档和参数说明;返回对象中的所有成员。

10. 当退出 Python 时是否释放所有内存分配

否;那些具有对象循环引用或全局命名空间引用的变量,在Python退出后一般是不被释放的。

11. 什么是猴子补丁

在程序运行时动态修改类和模块。

12. 什么是 Python 字典

使用花括号包裹键-值对,类似 json ,如{"key":"value"}。

13. 能否解释一下 *args 和 **kwargs

① 如果我们不知道将多少个参数传递给函数,可以使用*args。args不支持关键字传参,只支持位置传参,可以接收任意个数的位置参数,并将参数转换成元组。② 当我们不知道将会传入多少关键字参数时,使用**kwargs 会收集关键字参数,kwargs可以接收任意数量的关键字参数,并将参数转换为字典。使用 args 和 kwargs 作为参数名只是举例,可以任意替换。

14. 编程实现计算文件中的大写字母数

import os

def count_upper():

os.chdir('/home/thanlon')

with open('test.txt') as f:

ret_str = f.read()

ret_list = list(ret_str)

num = 0

for i in ret_list:

if i.isupper():

num += 1

return num

15. 什么是负索引

与正索引不同,负索引是从右边开始检索。

16. 如何随机打乱列表中元素,要求不引用额外的内存空间

random 包中的 shuffle() 函数来实现。

from random import shuffle

lst = [1, 2, 3, 4, 5, 6]

shuffle(lst)

print(lst)

17. 解释 Python 中的 join 和 split 函数

① join函数可以指定字符将列表中的字符串连接成新的字符串。② split函数可以指定字符分割字符串为list。

# join函数举例,split函数中没有参数默认不指定连接字符

print(''.join(['a', 'bb'])) # abb

# split函数举例,split函数中没有参数默认不对字符串分割,直接转为list

print('abcde'.split()) # ['abcde']

18. Python 区分大小写吗

Python中是区分大小写的,可以自行验证。

19. Python 中标识符的命名规则

可以是任意长度,① 只能是字母数字下划线组成且首位不能是数字;② 区分大小写;③ 不能用关键字作为标识符。

20. 如何删除字符串中的前置空格

使用字符串的 lstrip 方法删除字符串中的前置空格,使用 rstrip 方法删除字符串中的后置空格。返回的结果是已删除空字符的字符串。

前置空格是第一个非空格字符前的所有空格。

21. 如何将字符串转换为大小写

使用字符串的 upper 方法将字符串中的小写字母转换为大写,使用 lower 方法将字符串中的大写字母转换为小写。返回的结果是转换后的字符串。

22. Python 中的 pass 语句有什么作用

我们在写代码时,有时可能只写了函数声明而没想好函数怎么写,但为了保证语法检查的正确必须输入一些东西。在这种情况下,我们使用 pass 语句。pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作。

23. 请解释 Python 中的闭包

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包。闭包为函数创建一块区域为其维护自己的数据,以后执行时方便调用。闭包的应用场景之一就是装饰器。下面是闭包的例子:

def outer():# 外部函数

b = 10

def inner(): # 内部函数

print(a+b)# 调用外部函数的形式参数

return inner # 返回内部函数

24. 解释 Python 中的//,%和**运算符

① //是地板除,向下取整(1.6向下取整是1);② %是取模,获取余数;③**取幂,获取多少次方。

25. Python 中有多少种运算符,解释算术运算符

① Python中有7中运算符,分别是算术运算符、关系(比较)运算符、逻辑运算符、赋值运算符、位运算符、成员运算符、身份运算符。② +、-、*、/、//、%、**,就是对象的相加、相减……。

26. 解释 Python 中的关系运算符

关系运算符是用来比较对象的,关系运算符有 > < >= <= = !=,比较简单……。

27. 解释 Python 中的赋值和算数运算符

赋值运算就是=,算法运算符25题已经说过,不再赘述。

28. 解释 Python 中的逻辑运算符

有三个逻辑运算符,分别是and or not。and运算符两边都为真的时候,结果才为真。or运算符只要有一个为真,结果为真。not运算符是取反。

29. 解释 Python 中的成员运算符

使用in和not in可以来判断某个值是否在成员中,如判断字符或子串是否在字符串中,列表中元素是否在列表中(注意:不能判断子列表)

30. 解释 Python 中的身份运算符

is 和 is not 是python中的身份运算符,可以用来判断是否是同一个对象。

31. 解释 Python 中的位运算符

位运算符是按二进制位对值进行操作。有与(&)、或(|)、非(~)、亦或(^)、左移(<>)。

32. 如何在 Python 使用多进制数字

Python中除了十进制,还可以使用二进制、八进制和十六进制。用0b或0B前缀可以表示二进制数,使用 bin 函数可以将十进制数字装换成二进制。用0o或0O表示八进制,使用oct函数可以将十进制转换为八进制;用0x或0X表示十六进制,使用hex函数可以将十进制转换为十六进制。

33. 如何获取字典中的所有键

可以使用字典的keys方法。

34. 为什么标志符不建议使用下划线开头

Python中以下划线开头的标志符是私有的。我们原本是不详让它变成私有的,如果使用了下划线标志符就变为私有的了,所以不建议下划线开头。

35. 如何声明多个变量并赋值

可以使用传统a =1 b =2,也可以使用a, b = 1, 2 声明了两个变量并分别赋值。

36. 什么是元组的解封装

解封装就是把一个元组赋予多个变量,多个变量分别对应元组中的元素,元素和变量的数量必须一一对应。下面举个例子:

# 封装

tuple1 = 1,2,3

# 解封装(必须用元素个数的变量来接收元素)

x, y, z = tuple1

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值