Python常见面试题(总结自网络)

目 录

1. Python的特点和优点: 2

2. Python和C语言的区别: 2

3. Python2和Pyhton3的区别 2

4. Python的深拷贝和浅拷贝 2

5. Python三元表达式: 3

6. Python中如何实现多线程 3

7. 解释继承 3

8. 5个常用的网页开发框架 3

9. Python如何管理内存:对象和数据都保存在私有堆空间,使用内置的垃圾回收机制管理 4

10. Python中的dir函数和help函数 4

11. Python退出时是否释放所有内存分配 4

12. Python中的*args和**kwargs 4

13. 随机打乱列表中的元素,并不引用额外的内存空间 4

14. Python中的join()和split()函数 4

15. Python是区分大小写的语言 4

16. Python标识符命名规则 4

17. 分别使用lstrip()和rstrip函数去除前置空格和后置空格 4

18. 关于字符串的大小写 5

19. Python中pass、break、return、continue、exit的用法和区别 5

20. Python闭包 5

21. Python运算符 6

22. Python使用多进制数字: 6

23. 获取字典中的所有键:keys() 7

24. 不建议使用下划线做标识符开头,标识符下划线表示私有变量 7

25. Python的解封装:将元组中的值取出来,分别赋值给各个变量 7

26. Python的GIL(全局解释器锁) 7

27. 装饰器与类的区别 8

28. Python中list列表删除元素的方式 8

29. Python中dict字典增删元素的方法 8

30. 面向对象和面向过程的区别 8


1. Python的特点和优点:

A. 解释性:用自己定义的解释器,解释并执行有自己定义的语法结构生成的程序代码

B. 动态特性:程序在运行时可以修改(与其解释性有关)

C. 面向对象:类是用来具有相同属性和方法的对象的集合。

D. 语法简洁

E. 开源

2. Python和C语言的区别:

A. C语言是编译语言,Python是脚本语言。说是C语言会比Python快

B. C是静态语言,在变量在使用前进行声明,而Python是动态语言,在使用的时候可以直接使用,不需要声明

C. C里面没有对象,而Python里面是有对象

D. 脚本语言是读一行执行一行、而无需关注下一行的语言,非脚本语言则是必须读取整个源程序内容、建立完执行环境后执行的语言。

3. Python2和Pyhton3的区别

A. py3使用utf-8编码;py2使用ascill编码

B. py3中去除了py2中的不等于<>,改用!=

C. py3将py2中的print语句改成print()函数实现;将exec语句改成exec()函数

D. py3将py2中的raw_input()函数改成input()

E. py2中的long整型和int整型;py3中只有int整型

F. py3中/不再是整除,整除需要使用//

4. Python的深拷贝和浅拷贝

A. copy模块:import copy;浅拷贝:copy.copy;深拷贝:copy.deepcopy;

B. 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部子对象;

C. 深拷贝(deepcopy):拷贝父对象,同时开辟空间,逐层拷贝内部子对象

D. b=a.copy(),浅拷贝

E. b=a.deepcopy(),深拷贝

5. Python三元表达式:

[on true ] if [expression] else [on false]

如果expression 为真,则[on true]部分被执行;否则[on false]部分被执行

6. Python中如何实现多线程

A. 线程是轻量级的进程,Python是一个多线程语言,允许一次执行多个线程

B. GIL(全局解释器锁)确保一次执行单个线程。

C. 创建线程的方法

i. Python2使用thread模块中的start_new_thread()函数产生线程

ii. Python3使用threading模块创建新的线程:1、threading.thread;2、通过继承threading.Thread定义子类创建多线程

D. 多线程实现同步的4种方式

i. 锁机制:使用threading的lock类,类中acquire实现加锁,realease进行解锁

ii. 信号量

iii. 条件判断

iv. 同步队列

E. 线程池

i. 使用线程池可减少创建、销毁线程的时间,提高运行效率

7. 解释继承

A. 一个类继承另外一个类时可获取继承类的所有成员(属性和方法)

B. 继承利用重用代码,方便创建和维护代码

C. Python支持以下类:

i. 单继承

ii. 多重继承

iii. 多级继承

iv. 分层继承

v. 混合继承

8. 5个常用的网页开发框架

A. Django

B. CherryPy

C. TurboGears

D. Flaskl:轻量级框架,简单易学

i. WSGI工具箱采用Werkzeug,模板引擎采用Jinja2

E. Pyramid

9. Python如何管理内存:对象和数据都保存在私有堆空间,使用内置的垃圾回收机制管理

A. 垃圾回收的启动条件

i. 引用次数为0的对象与引用次数不为0的对象间减值达到一定阈值时,开户垃圾回收

B. 垃圾回收的目标

i. 对象引用次数变为0时,会成为对象

C. 分代回收

i. 每代对象经过一次回收后仍然存在,并归入下一代当中

10. Python中的dir函数和help函数

A. dir()函数:用来查询一个类或者对象的所有属性

B. help()函数用来模块、类型、对象、方法、属性的详细信息(帮助文档和参数说明)

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

不是的,当循环引用其他对象或者引用来自全局命令空间的对象模块,Python退出时并非完全释放。另外,C库保留的内存部分也不会释放。

12. Python中的*args和**kwargs

A. 定义函数时,当不知道可能传入多少个参数时,比如需要传入列表时,可以使用*args来收集

B. 定义函数时,当不知道可能传入多少个关键字参数时,可以使用**kwargs来收集关键字参数。

C. *args要在**kwargs之前使用

13. 随机打乱列表中的元素,并不引用额外的内存空间

A. 使用random包中的shuffle()[ˈʃʌfl]函数;打乱序列里面的元素并随机排列

14. Python中的join()和split()函数

A. join()函数将指定的字符添加到字符串/列表/字典/集合当中;或者将列表转成字符串

list1 = ['1','2','3','4'] 

s = "-"

s = s.join(list1)

print(s): 1-2-3-4

B. split()函数使用指定的字符分割字符串

string = www.gziscas.com.cn

print(string.split('.'))

['www', 'gziscas', 'com', 'cn']

15. Python是区分大小写的语言

16. Python标识符命名规则

A. 下划线或者大小写字母开头

B. 区分大小写

C. 关键字不能做标识符

17. 分别使用lstrip()和rstrip函数去除前置空格和后置空格


面试进阶题

18. 关于字符串的大小写

A. 检查字符串是否全为大写:isupper()

B. 检查字符串是否全为小写:islower()

C. 字符串转换为小写:lower()

D. 字符串转换为大写upper()

19. Python中pass、break、return、continue、exit的用法和区别

A. pass:用作占位符。当没想好写什么代码是可用pass代替

B. return:结束函数,返回参数

C. break:跳出最近一层的循环(当循环仅一层时,终止循环),程序继续

D. continue:跳出本次循环(循环不中止),程序继续

E. exit():退出整个循环,终止程序

20. Python闭包

https://blog.csdn.net/sc_lilei/article/details/80464645

A. 概念:一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行

B. 必要条件:

i. 闭包函数必须返回一个函数对象

ii. 闭包函数返回的函数对象必须引用外部变量(一般不为全局变量);被返回函数内部不一定要return

C. 使用:

21. Python运算符

A. 算术运算符

i. //:向下取整

ii. %:取余

iii. **:幂次方

B. 位运算符

i. ^:异或

ii. ~:取反

C. 逻辑运算符

i. and:布尔“与“

ii. or :布尔“或“

iii. not:布尔“非“

D. 比较运算符:== !=  >  <  。。。

E. 赋值运算符 =  +=  。。。

F. 成员运算符  in  not in

G. 身份运算符  is  is not

22. Python使用多进制数字:

A. 2进制

i. 0b开头

ii. bin()函数将数字转换为二进制

B. 8进制:0o开头

C. 16进制 0x开头

23. 获取字典中的所有键:keys()

24. 不建议使用下划线做标识符开头,标识符下划线表示私有变量

25. Python的解封装:将元组中的值取出来,分别赋值给各个变量

26. Python的GIL(全局解释器锁)

A. 并发和并行的解释

i. 并发:1个CPU,交替执行多个任务

ii. 并行:多个CPU,同时执行多个任务

B. GIL锁(全局解释器锁)

每个线程在执行时需要先获取GIL,保证同一时刻只有一个线程在执行代码。即同一时刻只用一个线程在使用CPU,并发处理方式。

C. 什么时候会释放GIL锁

i. I/O操作时,造成CPU闲置的情况会释放GIL锁

ii. 纯计算操作时(没有I/O操作),解释器会每隔100次(数值可设置)操作后释放GIL锁

D. 互斥锁和GIL锁的关系

i. 互斥锁:多线程时,保证修改共享数据时有序的修改,不会产生数据修改混乱

ii. GIL锁:保证同一时刻只有一个线程能使用到CPU

E. 如何解决GIL锁的问题

i. 使用多进程完成多线程的任务

ii. 在使用多线程时,可以利用C语言去实现

iii. 更换Cpython为Jpython(不建议)

27. 装饰器与类的区别

集合字符串列表等基础知识

28. Python中list列表删除元素的方式

A. 根据索引值删除元素:del listname[index]、listname.pop(index)

B. 根据元素值进行删除:listname.remove()

C. 删除列表所有元素:listname.clear()

29. Python中dict字典增删元素的方法

A. 增加元素:dictname.update()

B. 删除元素:dictname.pop()、del dictname[key]

30. 面向对象和面向过程的区别

面向过程:注重对事件的处理过程,处理过程

https://www.nowcoder.com/discuss/20611

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    伊森H阅读 3,101评论 0 15
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,799评论 0 5
  • 青城 我回来了 飞过太平洋 飞过滚滚长江 飞过维多利亚港 我回来了 吸了口 夹杂土腥味的青城气息 它憋了我整整一个...
    回眸丽影阅读 358评论 2 13
  • 由于这几天的心理变化想到一句话:不在其位不谋其政。还有就是,实力至上。 作为一个首发队员,因为一场...
    辞故迎新阅读 64评论 0 0
  • 说来惭愧,昨晚居然失眠了,难以入睡,大脑皮层神经元一遍又一遍重放着上台的场景,无限循环,虽早已过平常入睡时间...
    自律让我幸福阅读 230评论 1 2