欢迎阅读第 5 篇博客,最近在面试Python开发岗的时候遇到了一些笔试题(闭卷),总结了一下,希望在看完题目时,自己先思考一下,起到查漏补缺的作用!

Python开发岗笔试题(持续更新)

一、基础概念题

1.1 请问什么是闭包函数?

概念:在双层嵌套函数的前提下,内部函数使用了外部函数的值,并且外部函数返回值内部函数,我们这个内部函数称为闭包;

优点:保护全局变量或目标函数原有的代码和功能不被篡改;

缺点:由于内部函数持续引用外部函数的值,所以会导致这部分内存无法释放。

1.2 请问什么是装饰器?

概念:装饰器是使用一个闭包函数,在闭包函数内调用目标函数;

优点:在不破坏目标函数原有的代码和功能的前提下,为目标函数增加新的功能;

缺点:由于内部函数持续引用目标函数的值,所以会导致这部分内存无法释放;

应用:在目标函数上方直接使用**@闭包函数**,那么闭包函数的功能就添加到了目标函数内,就像装饰品一样。

1.3 请问什么是lambda函数?

概念:lambda函数又叫匿名函数,即不使用函数名的函数;

语法:lambda 参数名: 函数体;

优点:简洁,一行搞定;

缺点:不可复用;

应用:在写Spark和Flink代码的时候经常能使用到。

1.4 请问使用with关键字有什么好处?

语法:with 目标 as 变量名:函数体;

优点:在对文件进行操作,可以在操作完成后自动关闭文件,避免遗忘掉close方法。

1.5 请问什么是抽象函数?

概念:含有抽象方法的函数叫抽象函数,抽象方法是方法体为空,只有含有pass关键字;

优点:抽象函数常用于顶层设计。

1.6 请问什么是构造函数?

概念:类中__init__()方法的称为构造函数;

优点:在实例化对象时,传入参数自动传递给__init__方法使用并会自动执行。

1.7 请问python常用内置模块有哪些?(至少5个)

re:正则表达式

json:处理Json数据

random:生成伪随机数

math:数学运算函数

time:处理时间和睡眠

os:操作系统相关功能,如文件操作

threading:多线程处理

urllib:用于 HTTP 请求


二、相似函数(方法)题

2.1 请问load和loads的区别?

load方法直接将硬盘中Json文件加载为python对象;

loads方是将已经读取到内存中的Json字符串加载为python对象。

2.2 请问readline和readliens的区别?

readline方法只读取文件中的首行,返回一个字符串;

readlines方法一次性读取整个文件,返回一个列表且列表中的元素与文件的行一一对应。

2.3 请问浅拷贝和深拷贝分别是什么且有什么区别?

浅拷贝是copy.copy方法,浅拷贝的对象和原对象是同一个对象,当改变其值,原对象的值也随之发生变化;

深拷贝是copy.deepcopy方法,深拷贝的对象和原对象不是同一个对象,当改变其值,原对象的值不会发生变化。


三、简单数学计算题

3.1 如何用一行代码实现n的阶乘(1*2*3*…*n)

方式①

1
2
3
import math

print(math.factorial(n))

效果:n取值为5时,结果:120

方式②

1
2
3
from functools import reduce

print(reduce(lambda x, y: x*y, range(1, n+1)))

效果:n取值为10时,结果:3628800

3.2 实现数学中斐波那契数列

1
2
3
4
5
def fibonacci(n):
a, b = 0, 1
for i in range(n):
a, b = b, a+b
print(b)

效果:n取值为6时,结果为:13


四、手写代码题

4.1 请手写将一串英文字符串,大写字母转换为小写,小写字母转换为大写?

例如:输入:”Hello World!”,输出:”hELLO wORLD!”

方式①

1
2
3
string = "Hello World!"
swapped_string = string.swapcase() # 直接调用swapcase方法
print(swapped_string)

方式②

1
2
3
4
5
6
7
8
9
10
11
12
string = "Hello World!"
swapped_string = ""

for char in string:
if char.isupper():
swapped_string += char.lower()
elif char.islower():
swapped_string += char.upper()
else:
swapped_string += char

print(swapped_string)