01Python到底“强”在哪?先把它跟两种主流语言摆在一起比一比
Python 的简洁与强大, 不是自夸,而是与生俱来的基因。它像一门“伪代码”——写起来像英语,跑起来却像 C。下面把 Java 与 C 拖进来当参照系,一眼就能看出差异:
函数 VS 类:Python 把函数当成“一等公民”,直接参与高阶运算;Java 却把类捧成主角,函数只是类的成员。
类型强弱:Python 是强类型动态语言,变量在运行时才确定类型;Java 是强类型静态语言,编译期就锁死。
系统级性能:C 用指针与汇编级优化,天生跑得快;Python 靠解释器“边读边译”,速度慢一个量级。但别忘了,CPython 本身就是用 C 写的,只是把编译优化留给了编译器。

02官方八大“基本功”一次说清
Python 的官方数据类型只有八种,却撑起了整个生态:
number(数字):整数、浮点、复数,统统装箱。
string(字符串):单引号、双引号、三引号,随意切换。
list(列表):可变序列,支持增删改。
tuple(元组):不可变序列,效率高,常用于集合函数。
dict(字典):键值对映射,O(1) 查找。
set(集合):无序容器,去重+交并差。
Boolean(布尔值):True/False,逻辑核心。
None(空值):表示“无”,常做默认返回值。
记住口诀:“数串表元字典集,布尔空值别忘记”,面试现场写板书也稳稳的。
03解释器江湖:五虎上将谁最强?
Python 的代码必须通过解释器才能跳舞,市面上常见五款,各有千秋:
CPython(C 语言实现):官方正宗,社区最成熟,兼容性之王。
IPython:交互式增强版,代码补全、魔法命令一键爽歪歪。
PyPy:JIT 加速派,同样代码比 CPython 快 2~5 倍,适合数值计算。
Jython:跑在 Java 虚拟机上,想用 Python 写 Android 应用?先拿它试水。
IronPython:扎根 .Net,与 C# 无缝协作,金融系统常见身影。
面试官最爱问:“同一份代码,在 CPython 与 PyPy 上跑有差异吗?”——答案几乎一定有,JIT 会把热点代码编译成机器码,循环体里做数学运算时差异最明显。
04面向对象三大板斧:封装、继承、多态
4.1 ◆ 封装——把“怎么干”藏起来,只留“怎么用”用双下划线 \_\_name 把属性私有化,外部无法直接访问;外部通过公开方法调用,既隔离变化又提高安全。
好处四连击:隔离、复用、易用、安全。
4.2 ◆ 继承——复制+改造的“一键生成”子类 extends 父类,复用父类代码;若想扩展新功能,重写父类方法即可。单继承简单,多继承需警惕“钻石继承”陷阱——四个父类可能引发方法二义性。
写法示例:
```python
class Parent:
def \_\_init\_\_(self):
self.value = "parent"
def show(self):
print(self.value)
class Sub(Parent):
def \_\_init\_\_(self):
super().\_\_init\_\_() # 调用父类构造器
def show(self):
self.value = "child" # 重写父类属性
super().show() # 再调用父类方法,完成多态调用
```
4.3 ◆ 多态——爸爸的引用指向儿子的对象父类引用指向子类实例,调用同一方法却跑出不同结果。Python 用动态绑定实现,无需显式声明。
好处:程序更灵活、扩展更方便。记住三步走:定义子类 → 重写方法 → 用父类引用接收。
05xrange 与 range 的前世今生
二者都能在 for 循环里“数数”,但底层机制天差地别:
range() 返回一个 list 对象,一次性把所有元素加载到内存;若循环范围很大,瞬间爆内存。
xrange() 返回一个生成器,边循环边取值,内存占用极低;Python 3 直接废弃 xrange,统一用 range 且自带惰性求值。
一句话总结:“小范围用 list,大范围用生成器”,面试手写答案记得先判断循环次数再选工具。
06命名规范:一眼辨吉凶的硬规则
不能以数字开头或含中文——编译器直接报错。
只能字母、数字、下划线——且区分大小写。
避开关键字——用 is_active 而非 isactive 提高可读性。
见名知意——变量名要让人一眼知道“这是啥”。
模块级命名用大写字母与下划线拼接——如 FILE_PATH;函数级用小写字母加下划线 def process_file(path)。
牢记以上五条,代码审查能少一半吐槽。
07可变 VS 不可变:内存地址里的隐藏游戏
Python 的六种标准类型里,数字、字符串、元组是不可变类型;列表、字典、集合是可变类型。区别只看一句:变量名指向的内存地址是否会变化。
不变类型一旦赋值,内存地址终身不变;尝试修改会抛 TypeError。
可变类型允许原地修改,内存地址可随意挪动。
面试常见场景题:
```python
a = [1, 2, 3] # 可变列表
b = (1, 2, 3) # 不变元组
a.append(4) # a 的地址不变,内容追加成功
b[1] = 4 # TypeError: tuple object does not support item assignment
```
弄懂这条线,面试官再追问“为什么字典无序”时你也能从容作答——哈希表底层重新定位键值对造成的“地址漂移”。
原创文章,作者:孙杰,如若转载,请注明出处:http://m.gaochengzhenxuan.com/yule/14126.html