Python面试常考的代码编程题(快速排序、二分查找、装饰器、单例模式、斐波那契数列)

本文深入解析Python面试中常见的编程题目,包括快速排序、二分查找、装饰器、单例模式及斐波那契数列的实现。通过递归与非递归算法对比,装饰器的工作原理及单例模式的不同实现方式,帮助读者掌握Python核心编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python面试常考的代码编程题(快速排序、二分查找、装饰器、单例模式、斐波那契数列)

小白一个,有错误欢迎指正,谢谢

1.快速排序

递归算法
def QuickSort(arr,start,end):
	if start < end:
		i,j = start,end
		temp = arr[i]
		while i < j:
			while (i<j) and arr[i] <= temp:
				i += 1
			arr[j] = arr[i]
			while (i<j) and arr[j] > temp:
			 	j -= 1
			arr[i] = arr[j]
		arr[i] = temp
		QuickSort(arr,start,i-1)
		QuickSort(arr,i+1,end)
	return arr		
QuickSort = lambda arr : arr if len(arr) <= 1 else QuickSort([item for item in arr[1:] if item < arr[0]]) + [arr[0]] + QuickSort([item for item in arr[1:] if item > arr[0]])

2.二分查找

递归算法
def BinarySearch(arr,start,end,key):
	if start > end:
		return -1
	mid = start + (end - start)//2
	if key > arr[mid]:
		return BinarySearch(arr,mid+1,end,key)
	elif key < arr[mid]:
		return BinarySearch(arr,start,mid-1,key)
	else:
		return mid
非递归算法			
def BinarySearch(arr,key):
	low = 0
	high = len(arr)-1
	while low <= high:
		mid = low + (high-low)//2
		if key > arr[mid]:
			low = mid + 1
		elif key < arr[mid]:
			high = mid - 1
		else:
			return mid
	return -1	

3.装饰器

def A_Outer(func):
	print(2)
	def A_Inner(*args,**kwargs):
		print(3)
		func(*args,**kwargs)
		print(7)
	return A_Inner

def B_Outer(func):
	print(1)
	def B_Inner(*args,**kwargs):
		print(4)
		func(*args,**kwargs)
		print(6)
	return B_Inner

 
@A_Outer
@B_Outer
def func(*args,**kwargs):
	print("5:我是func")

func()

'''
要注意的是,装饰器在被装饰的函数运行前就已经运行了,可以试一下把func()注释掉,结果会显示
1
2

也即装饰器调用顺序:先调用B_Outer,再调用A_Inner,A_Outer装饰器传入的func其实是
@B_Outer
def func(*args,**kwargs):
	print("5:我是func")

也就是被B_Outer装饰了的func,而不是def 后面的func本身,B_Outer装饰器里传入的func才是def func 也即字面上的func本身

可以看一下下面这张图
'''
# 装饰器是怎么工作的?
def A_Outer(func):
	def A_Inner(*args,**kwargs):
	return A_Inner
"""
函数def A_Outer的返回值是函数A_Inner,也就是说执行了函数A_Outer后,结果是A_Inner
var = A_Outer(func)  # var=A_Inner
func = var
这样也就实现了装饰器@的功能即 func=A_Outer(func)=A_Inner

在这里插入图片描述

# 1、注释掉上面代码中的func()后的执行结果
1
2

# 2、正常执行func()后的执行结果(打印顺序):
1
2
3
4
5:我是func
6
7

4.单例模式

4.1 Python自带的模块实现

Python中的模块是天然的单例模式,模块在生成时会自动生成一个.pyc文件,下次再使用这个模块的时候,只需要加载.pyc文件即可,不会再次执行模块代码
调用时,只需 from mySingleton import Singleton,就可以使用里面的类Singleton

#这是一个文件名为mySingleton.py的py文件
class Singleton:
	def func(self)
		pass
singleton = Singleton()

4.2 使用装饰器实现

def Singleton(func):
	_instance = {}
	def _Singleton(*args,**kwargs):
		if func not in _instance:
			_instance[func] = func(*args,**kwargs)
			return _instance[func]
	return _Singleton

@Singleton
class A:
	def __init__(self,x=0):
		self.x = x
a1 = A(1)
a2 = A(2)
print(a1 is a2)   #结果为True,说明a1和a2的地址相同	

4.3使用类实现

class Singleton(object):
	def __init__(self):
		pass
	@classmethod
	def instance(cls,*args,**kwargs):
		if not hasattr(	Singleton,"_instance")	
			Singleton._instance = Singleton(*args,**kwargs)
		return Singleton._instance
	

5.斐波那契数列

def Fib(num):
	if num in (1,2):
		return 1
	return Fib(num-1)+(num-2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值