### 经典Python面试题详解 #### 1. 为什么学习Python? - **简洁易读**:Python语法简单明了,降低了学习门槛。 - **应用广泛**:可用于Web开发、数据分析、人工智能等多个领域。 - **社区活跃**:拥有庞大的开发者社区支持,遇到问题容易找到解决方案。 - **跨平台性**:Python可在多种操作系统上运行,便于移植。 #### 2. 通过什么途径学习的Python? - **在线课程**:如Coursera、edX等提供的Python教程。 - **书籍**:《Python Crash Course》、《Learn Python the Hard Way》等。 - **实践项目**:通过实际项目应用所学知识,加深理解。 #### 3. Python和Java、PHP、C、C#、C++等其他语言的对比? - **动态与静态类型**:Python为动态类型,而Java、C#和C++为静态类型。 - **解释与编译**:Python通常被解释执行,而C/C++等需要编译。 - **应用领域**:Python在数据科学领域表现突出;Java适用于企业级应用;C/C++常用于系统级编程。 #### 4. 解释型和编译型编程语言? - **解释型**:源代码每次运行时都会被逐行解释执行,如Python、JavaScript。 - **编译型**:源代码会被编译成机器码,之后由计算机直接运行,如C/C++。 #### 5. Python解释器种类及特点? - **CPython**:官方版本,最常用,性能较好。 - **Jython**:在Java平台上运行的Python解释器。 - **IronPython**:在.NET平台上运行的Python解释器。 #### 6. 位和字节的关系? - **位**:计算机中最小的数据单位,只能表示0或1。 - **字节**:由8位组成的基本存储单位。 #### 7. b、B、KB、MB、GB的关系? - **b(bit)**:1位。 - **B(Byte)**:8位。 - **KB(Kilobyte)**:1024 Byte。 - **MB(Megabyte)**:1024 KB。 - **GB(Gigabyte)**:1024 MB。 #### 8. PEP8规范 - 使用4个空格进行缩进。 - 模块名、包名全部小写。 - 函数名、变量名采用小写字母加下划线的方式。 - 类名首字母大写。 - 限制每行代码长度不超过79字符。 #### 9. 数制转换 ```python v = "0b1111011" # 二进制转十进制 print(int(v, 2)) v = 18 # 十进制转二进制 print(bin(v)) v = "011" # 八进制转十进制 print(int(v, 8)) v = 30 # 十进制转八进制 print(oct(v)) v = "0x12" # 十六进制转十进制 print(int(v, 16)) v = 87 # 十进制转十六进制 print(hex(v)) ``` #### 10. IP地址转整数 ```python def ip_to_int(ip): return int(''.join([bin(int(x)+256)[3:] for x in ip.split('.')]), 2) print(ip_to_int("10.3.9.12")) ``` #### 11. Python递归的最大层数 默认情况下,Python递归深度限制为3000左右,可以通过`sys.setrecursionlimit()`调整。 #### 12. 条件运算符示例 - `v1 = 1 or 3` 结果为1。 - `v2 = 1 and 3` 结果为3。 - `v3 = 0 and 2 and 1` 结果为0。 - `v4 = 0 and 2 or 1` 结果为1。 - `v5 = 0 and 2 or 1 or 4` 结果为1。 - `v6 = 0 or False and 1` 结果为False。 #### 13. 字符编码差异 - **ASCII**:仅支持128个字符,主要用于英文。 - **Unicode**:支持全球各种文字,使用UTF-8编码传输。 - **UTF-8**:Unicode的一种编码方式,可变长。 - **GBK**:扩展了ASCII,支持中文简体。 #### 14. 字节码与机器码区别 - **字节码**:由解释器解释执行,平台无关。 - **机器码**:特定平台上的二进制指令集。 #### 15. 三元运算 - **规则**:`value_if_true if condition else value_if_false` - **应用场景**:快速返回不同条件下的不同值。 #### 16. Python2与Python3的区别 - **print语句**:Python2为print语句,Python3为print函数。 - **整数除法**:Python2中`/`返回整数,Python3返回浮点数。 - **Unicode支持**:Python3默认使用Unicode。 #### 17. 一行代码实现数值交换 ```python a, b = b, a ``` #### 18. Python3与Python2中int与long的区别 - Python2中`int`和`long`类型分别对应固定大小和任意大小的整数。 - Python3中合并为统一的`int`类型,支持任意大小的整数。 #### 19. xrange与range的区别 - `range`返回列表,占用更多内存。 - `xrange`返回迭代器,节省内存。 #### 20. 文件操作时xreadlines与readlines的区别 - `readlines`一次性读取所有行到列表中。 - `xreadlines`逐行读取,节省内存。 #### 21. 布尔值为False的常见值 - `False`、`None`、`0`、空字符串`""`、空列表`[]`等。 #### 22. 常用数据结构方法 - **字符串**:`split()`、`join()`、`replace()`、`strip()`、`upper()`。 - **列表**:`append()`、`extend()`、`pop()`、`sort()`、`index()`。 - **元组**:`count()`、`index()`。 - **字典**:`get()`、`setdefault()`、`items()`、`values()`、`keys()`。 #### 23. Lambda表达式格式与应用场景 - **格式**:`lambda arguments: expression` - **应用场景**:排序函数、简化函数定义等。 #### 24. pass的作用 - 作为占位符,表示“什么也不做”。 #### 25. *arg和**kwarg作用 - `*args`收集所有位置参数为元组。 - `**kwargs`收集所有关键字参数为字典。 #### 26. is与==的区别 - `is`用于判断两个对象是否是同一个对象。 - `==`用于判断两个对象的值是否相等。 #### 27. 深浅拷贝及其应用场景 - **浅拷贝**:只复制引用,修改会影响原对象。 - **深拷贝**:完全复制,修改不会影响原对象。 - 应用场景:当需要复制复杂对象时选择合适的方式。 #### 28. Python垃圾回收机制 - 主要依赖引用计数,当引用计数为0时对象被回收。 - 周期性的垃圾回收,处理循环引用。 #### 29. 可变类型与不可变类型 - **可变类型**:列表、字典等,可以修改其元素。 - **不可变类型**:字符串、元组等,一旦创建后不能更改。 #### 30. 示例 ```python v = dict.fromkeys(['k1', 'k2'], []) v['k1'].append(666) print(v) # {'k1': [666], 'k2': []} v['k1'] = 777 print(v) # {'k1': 777, 'k2': []} ``` #### 31. 示例 ```python def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) # [0, 2, 4, 6] ``` #### 32. 内置函数 - `len()`、`type()`、`abs()`、`sum()`、`max()`、`min()`等。 #### 33. filter、map、reduce的作用 - **filter**:过滤序列中的元素。 - **map**:对序列中的每个元素应用函数。 - **reduce**:将序列缩减为单一值。 #### 34. 一行代码实现9*9乘法表 ```python print('\n'.join([' '.join(['{:2}'.format(i * j) for j in range(1, 10)]) for i in range(1, 10)])) ``` #### 35. 如何安装第三方模块及常用模块 - 使用pip安装:`pip install module_name` - 常用模块:requests、numpy、pandas、flask等。 #### 36. 常用模块 - requests(HTTP请求)、numpy(数值计算)、pandas(数据分析)、flask(Web框架)、matplotlib(绘图)等。 #### 37. re的match和search区别 - `match`只检查字符串开头是否匹配模式。 - `search`检查整个字符串是否存在匹配项。 #### 38. 正则的贪婪匹配 - 贪婪匹配尽可能多地匹配字符。 - 非贪婪匹配尽可能少地匹配字符。 #### 39. 示例 - `a = [i % 2 for i in range(10)]` 结果为 `[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]`。 - `b = (i % 2 for i in range(10))` 结果为一个生成器对象。 #### 40. 示例 - `a = 1 or 2` 结果为1。 - `b = 1 and 2` 结果为2。 - `c = 1 < (2 == 2)` 结果为True。 - `d = 1 < 2 == 2` 结果为False。 #### 41. 函数参数陷阱 - `def func(a, b=[]):` 的`b`参数会在多次调用间共享,可能导致意料之外的结果。 #### 42. 字符串转列表 ```python s = "1,2,3" l = s.split(',') ``` #### 43. 字符串列表转数字列表 ```python s = ['1', '2', '3'] l = list(map(int, s)) ``` #### 44. 元组与列表区别 - `a = [1, 2, 3]` 是列表。 - `b = [(1), (2), (3)]` 为元组组成的列表,但每个元组只有一个元素。 - `b = [(1,), (2,), (3,)]` 为元组组成的列表,每个元组含有一个元素。 #### 45. 生成平方列表 ```python print([i**2 for i in range(1, 11)]) ``` #### 46. 删除列表中重复的值 ```python lst = [1, 2, 3, 2, 4, 3] print(list(set(lst))) ``` #### 47. 在函数中设置全局变量 ```python x = 0 def set_global(): global x x = 1 set_global() print(x) ``` #### 48. logging模块的作用及应用场景 - 记录日志信息,便于调试和维护程序。 - 应用于生产环境中记录异常信息等。 #### 49. 实现Stack ```python class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def is_empty(self): return len(self.items) == 0 ``` #### 50. 字符串格式化 - `%`操作符。 - `.format()`方法。 - f-string(Python 3.6+)。 #### 51. 生成器、迭代器、可迭代对象及其应用场景 - **生成器**:使用`yield`关键字定义,用于生成序列。 - **迭代器**:实现了`__iter__()`和`__next__()`方法的对象。 - **可迭代对象**:实现了`__iter__()`方法的对象。 - 应用场景:节省内存、处理大数据流等。 #### 52. 二分查找函数 ```python def binary_search(arr, target): low, high = 0, len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 ``` #### 53. 对闭包的理解 - 闭包允许函数访问定义在函数外部的局部变量。 - 适用于封装私有变量和函数。 #### 54. os与sys模块的作用 - **os**:提供与操作系统交互的功能,如文件操作、进程管理等。 - **sys**:提供了关于Python解释器环境的信息和控制。 #### 55. 生成随机数 ```python import random print(random.randint(1, 100)) ``` #### 56. 删除文件 ```python import os os.remove('file.txt') ``` #### 57. 面向对象的理解 - 面向对象编程通过对象来组织代码,提高代码复用性和可维护性。 - 包括类、对象、继承、封装、多态等概念。 #### 58. Python面向对象中的继承特点 - 支持单继承和多继承。 - 子类可以重写父类的方法。 #### 59. 面向对象的深度优先与广度优先 - **深度优先**:先探索子类,再回到父类。 - **广度优先**:先探索同层级的所有类,再深入下一层级。 #### 60. super的作用 - 用于访问基类的方法,解决多重继承的问题。 #### 61. functools模块的函数及其作用 - `functools.partial`:创建部分函数。 - `functools.reduce`:将函数应用于序列元素,得到单一结果。 - `functools.wraps`:保持装饰器内函数的元信息。 #### 62. 面向对象中带下划线的特殊方法 - `__new__`:对象创建之前调用。 - `__init__`:对象初始化时调用。 - `__str__`:返回对象的字符串表示。 - `__repr__`:返回对象的正式字符串表示。 - `__eq__`:定义对象的相等性。 #### 63. 判断函数与方法 - 函数:独立存在于模块中的命名代码块。 - 方法:属于类或对象的函数。 #### 64. 静态方法与类方法区别 - **静态方法**:不接收额外的第一个参数。 - **类方法**:第一个参数为类本身(`cls`)。 #### 65. 面向对象中的特殊成员及其应用场景 - **属性**:描述对象的特征。 - **方法**:描述对象的行为。 - **构造器**:初始化对象。 - **析构器**:对象销毁前调用。 #### 66. 三位数组合 - 可以使用排列组合的知识计算。 - 总共有\(5 \times 4 \times 3 = 60\)种不同的三位数。 #### 67. 反射及其应用场景 - **反射**:在运行时检查或修改对象的行为。 - 应用场景:动态获取类信息、动态调用方法等。 #### 68. metaclass的作用 - 控制类的创建过程。 - 可以用来自动添加类属性、修改类行为等。 - 应用于ORM框架、验证框架等场景。
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助