01 基础语法:面试官一眼看穿你的代码功底
Python基础语法是面试的“入场券”。面试官不是要你背语法,而是看你写代码的习惯。一个简单的变量命名、缩进错误,就能让面试官判定你代码质量不合格。

变量与数据类型:面试官常问“Python中可变与不可变数据类型有哪些?”这题考的是内存机制。不可变类型(int、str、tuple)在修改时创建新对象,可变类型(list、dict、set)修改时地址不变。写代码时,用id()函数验证。
python
a = [1, 2, 3]
print(id(a)) # 输出地址
a.append(4)
print(id(a)) # 地址不变,list可变
列表推导式:面试必考。普通写法3行代码,列表推导式1行搞定。面试官看到你用列表推导式,就知道你懂Pythonic风格。
python
# 普通写法
squares = []
for i in range(10):
squares.append(i**2)
# 列表推导式
squares = [i**2 for i in range(10)]
字典合并:Python 3.9+支持|运算符合并字典。面试官问“如何合并两个字典”,你答出这个方法,瞬间拉开差距。
python
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged = dict1 | dict2 # 简洁高效
金句:代码不是写给人看的,是写给面试官看的。
02 函数与作用域:面试官挖的坑,你跳了几个?
函数面试题是最容易踩坑的。面试官会从函数参数、作用域、闭包三个维度考察你。
默认参数陷阱:面试官一定会问“默认参数为什么是可变对象会出问题?”因为默认参数在函数定义时创建,多次调用会共享同一个对象。
python
def add_item(item, list=[]):
list.append(item)
return list
print(add_item(1)) # [1]
print(add_item(2)) # [1, 2] 结果错误
正确写法:用None作为默认值,函数内部创建新列表。
python
def add_item(item, list=None):
if list is None:
list = []
list.append(item)
return list
变量作用域:global和nonlocal是高频考点。面试官会给你一段代码,问你输出结果。
python
x = 10
def func():
x = 20 # 局部变量
print(x) # 20
func()
print(x) # 10
如果要在函数内修改全局变量,必须用global声明。
python
x = 10
def func():
global x
x = 20
func()
print(x) # 20
闭包:面试官考闭包,本质是考你对作用域的理解。闭包可以记住外部函数的变量,即使外部函数已经执行完毕。
python
def outer(x):
def inner(y):
return x + y
return inner
add5 = outer(5)
print(add5(3)) # 8
金句:函数参数默认值,写错一次,面试直接凉。
03 数据结构:面试官最爱的3道必考题
Python数据结构面试题中,列表、字典、集合是三大核心。面试官不会直接问你概念,而是让你解决实际问题。
列表去重:面试官问“如何对列表去重并保持顺序?”普通回答用循环,优秀回答用dict.fromkeys()。
python
# 普通方法
def dedup(lst):
result = []
for i in lst:
if i not in result:
result.append(i)
return result
# 高效方法
def dedup(lst):
return list(dict.fromkeys(lst))
字典排序:面试官问“如何按值对字典排序?”这题考的是sorted()函数和lambda表达式。
python
scores = {'Alice': 88, 'Bob': 95, 'Charlie': 72}
sorted_scores = dict(sorted(scores.items(), key=lambda x: x[1], reverse=True))
print(sorted_scores) # {'Bob': 95, 'Alice': 88, 'Charlie': 72}
集合运算:测试中经常需要对比两个数据集。集合的并集、交集、差集操作能大幅简化代码。
python
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
print(set1 & set2) # 交集 {3, 4}
print(set1 | set2) # 并集 {1, 2, 3, 4, 5, 6}
print(set1 - set2) # 差集 {1, 2}
金句:数据结构选对,代码效率翻倍。
04 异常处理与文件操作:面试官的终极考验
异常处理和文件操作是测试工程师的日常工作。面试官会考你如何写出健壮的代码。
异常处理:面试官问“如何捕获多个异常?”新手只会写except Exception,高手会用异常元组。
python
try:
result = 10 / 0
except (ZeroDivisionError, TypeError) as e:
print(f"捕获异常: {e}")
自定义异常:面试官问“如何定义自己的异常类?”这题考的是你对面向对象的理解。
python
class ValidationError(Exception):
def __init__(self, message, code):
super().__init__(message)
self.code = code
try:
raise ValidationError("数据验证失败", 400)
except ValidationError as e:
print(f"错误代码: {e.code}, 错误信息: {e}")
文件操作:面试官必问“with语句的原理是什么?”with语句会自动调用上下文管理器的__enter__和__exit__方法,确保资源释放。
python
class FileManager:
def __enter__(self):
print("打开文件")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("关闭文件")
return True
with FileManager() as f:
print("执行操作")
CSV文件读取:测试中经常需要处理测试数据。用csv模块比手动解析字符串高效10倍。
python
import csv
with open('test_data.csv', 'r') as file:
reader = csv.DictReader(file)
for row in reader:
print(row['username'], row['password'])
金句:异常处理不是救火,是防火。
05 面向对象与测试框架:面试官的终极加分项
面向对象编程是测试框架的基础。面试官会从封装、继承、多态三个角度考察你。
封装:面试官问“如何实现私有属性?”Python用双下划线实现名称改写,但本质是伪私有。
python
class TestCase:
def __init__(self):
self.__name = "test_login"
def get_name(self):
return self.__name
tc = TestCase()
print(tc.get_name()) # test_login
print(tc._TestCase__name) # test_login 仍可访问
继承:面试官问“如何复用测试代码?”用继承实现基类,子类继承公共方法。
python
class BaseTest:
def setup(self):
print("初始化测试环境")
def teardown(self):
print("清理测试环境")
class LoginTest(BaseTest):
def test_login(self):
self.setup()
print("执行登录测试")
self.teardown()
多态:面试官问“如何实现不同的测试策略?”用多态让不同子类实现相同接口。
python
class TestStrategy:
def execute(self):
pass
class BrowserTest(TestStrategy):
def execute(self):
print("执行浏览器测试")
class APITest(TestStrategy):
def execute(self):
print("执行API测试")
def run_test(strategy):
strategy.execute()
run_test(BrowserTest())
run_test(APITest())
unittest框架:面试官问“如何编写测试用例?”用unittest框架展示你的测试功底。
python
import unittest
class TestMath(unittest.TestCase):
def setUp(self):
self.data = [1, 2, 3]
def test_sum(self):
result = sum(self.data)
self.assertEqual(result, 6)
def test_max(self):
result = max(self.data)
self.assertEqual(result, 3)
def tearDown(self):
print("测试完成")
if __name__ == '__main__':
unittest.main()
金句:测试框架不是工具,是思维。
---
面试官问的不是代码,是你解决问题的能力。Python基础题只是敲门砖,真正拉开差距的,是你对代码的理解深度。下次面试前,把这5个模块的代码敲3遍,你的通过率至少提升80%。