Python程序员面试必知:10个高频核心问题解析

陆遥
陆遥
发布时间:2026-10-13| 2人浏览过
原创

本文整理了Python面试中最高频的10个技术问题,涵盖类继承、__call__与__getattr__等魔术方法、__new__与__init__的区别、列表字典推导式、全局局部变量、变量交换、包导入控制、闭包实现及字符串性能优化。通过具体代码示例深入解析每个考点,帮助开发者掌握Python核心机制,提升面试通过率。

在整理Python程序员面试试题的过程中,我们发现了一些被面试官反复提及的高频问题,以下是本次收集的核心内容。

Python作为一门极受欢迎的编程语言,随着机器学习、云计算等技术的快速发展,市场对Python开发者的需求持续增长。为此,我们汇总了10个Python面试中常考的问题,供广大开发者参考学习。

类继承

假设存在如下代码片段:

class A(object):
def show(self):
print 'base show'
class B(A):
def show(self):
print 'derived show' 
obj = B()
obj.show()

请问如何调用类A的show方法? 具体实现方式如下:

obj.__class__ = A
obj.show() 

__class__属性指向类对象,只需将其赋值为类型A,随后调用show方法即可,但使用后需注意将属性恢复原状。

方法对象

问题:为了使以下代码正常运行,需要补充哪些代码?

class A(object):
def __init__(self,a,b):
self.__a = a
self.__b = b
def myprint(self):
print 'a=', self.__a, 'b=', self.__b
a1=A(10,20)
a1.myprint() 
a1(80)

答案:为了让对象实例能够被直接调用,需要实现__call__方法。

class A(object):
def __init__(self, a, b):
self.__a = a
self.__b = b
def myprint(self):
print 'a=', self.__a, 'b=', self.__b
def __call__(self, num):
print 'call:', num + self.__a

new和init

以下代码的输出结果是什么?

class B(object):
def fn(self):
print 'B fn'
def __init__(self):
print "B INIT"
class A(object):
def fn(self):
print 'A fn'
def __new__(cls,a):
print "NEW", a
if a>10:
return super(A, cls).__new__(cls)
return B()
def __init__(self,a):
print "INIT", a 
a1 = A(5)
a1.fn()
a2=A(20)
a2.fn()

答案:

NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn

使用__new__方法可以决定返回哪个对象,即在创建对象之前进行控制,这常用于单例模式或工厂模式的设计。而__init__则是在对象创建后调用的初始化方法。

Python list和dict生成

以下代码的输出结果是什么?

ls = [1,2,3,4]
list1 = [i for i in ls if i>2]
print list1
list2 = [i*2 for i in ls if i>2]
print list2
dic1 = {x: x**2 for x in (2, 4, 6)}
print dic1
dic2 = {x: 'item' + str(x**2) for x in (2, 4, 6)}
print dic2
set1 = {x for x in 'hello world' if x not in 'low level'}
print set1

答案:

[3, 4] 
[6, 8]
{2: 4, 4: 16, 6: 36}
{2: 'item4', 4: 'item16', 6: 'item36'}
set(['h', 'r', 'd'])

全局和局部变量

以下代码的输出结果是什么?

num = 9
def f1():
num = 20
def f2():
print num 
f2()
f1()
f2()

答案:

9
9

num并非全局变量,因此每个函数都拥有自己独立的num副本。若需修改num,必须使用global关键字进行声明,示例如下:

num = 9
def f1():
global num
num = 20 
def f2():
print num 
f2()
f1()
f2() 
# prints:
# 9
# 20

交换两个变量的值 使用一行代码交换两个变量值

a=8
b=9

答案:

(a,b) = (b,a)

默认方法

参考以下代码:

class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print 'init'
def mydefault(self):
print 'default'
a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()

方法fn1/fn2/fn3均未定义,请添加代码使得所有未定义的方法都调用mydefault函数,上述代码的预期输出为:

default
default
default

答案:

class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print 'init'
def mydefault(self):
print 'default'
def __getattr__(self,name):
return self.mydefault
a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()

__getattr__方法仅在调用未定义的方法时被触发。当fn1方法传入参数时,我们可以为mydefault方法增加*args不定参数以兼容这种情况。

class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print 'init'
def mydefault(self,*args):
print 'default:' + str(args[0])
def __getattr__(self,name):
print "other fn:",name
return self.mydefault
a1 = A(10,20)
a1.fn1(33)
a1.fn2('hello')
a1.fn3(10)

包管理

一个包中包含三个模块:mod1.py、mod2.py、mod3.py。在使用from demopack import *导入模块时,如何确保仅导入mod1和mod3?

答案:在__init__.py文件中增加以下配置:

__all__ = ['mod1','mod3']

闭包 编写一个函数,接收整数参数n,返回一个函数,该函数的功能是将传入的参数与n相乘并返回结果。

答案:

def mulby(num):
def gn(val):
return num * val
return gn
zw = mulby(7)
print(zw(9));

性能

分析以下代码为何运行缓慢?

def strtest1(num):
str='first'
for i in range(num):
str+="X"
return str

答案:Python中的str是不可变对象,每次迭代都会生成新的str对象来存储新字符串。num值越大,创建的str对象越多,内存消耗也就越大。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。