当前位置: 首页 > news >正文

Python常见面试题的详解12

1. hasattr ()、getattr ()、setattr () 函数是如何使用的?

  • 要点

这三个函数用于对对象的属性进行检查、获取和设置操作,是 Python 中进行对象属性动态操作的重要工具。

  1. hasattr():用于检查对象是否具有指定属性或方法。

  2. getattr():用于获取对象的属性或方法,还可设置默认值。

  3. setattr():用于设置对象的属性值,若属性不存在则创建。

python

class Book:def __init__(self, title):self.title = title# 创建 Book 类的实例
my_book = Book("Python Programming")# hasattr() 示例
print(hasattr(my_book, "title"))  # 输出 True,因为 my_book 有 title 属性
print(hasattr(my_book, "author"))  # 输出 False,my_book 没有 author 属性# getattr() 示例
print(getattr(my_book, "title"))  # 输出 "Python Programming"
print(getattr(my_book, "author", "Unknown"))  # 输出 "Unknown",因为 author 属性不存在,返回默认值# setattr() 示例
setattr(my_book, "author", "John Doe")
print(my_book.author)  # 输出 "John Doe",成功设置 author 属性
  • 示例

这些函数在动态编程中非常有用,例如在编写插件系统时,可以根据配置文件动态检查和设置对象的属性。

python

# 模拟插件系统
class Plugin:def __init__(self):self.enabled = Falseplugin = Plugin()
config = {"enabled": True}for key, value in config.items():if hasattr(plugin, key):setattr(plugin, key, value)print(plugin.enabled)  # 输出 True,根据配置动态设置了属性

2. 写出阶乘函数reduce(lambda x,y : x*y,range(1,n+1))的结果。

  • 要点

使用 reduce 函数结合 lambda 表达式可以简洁地实现阶乘计算。reduce 函数会对序列中的元素进行累积操作,lambda 表达式定义了累积的规则。

python

from functools import reducen = 6
factorial = reduce(lambda x, y: x * y, range(1, n + 1))
print(factorial)  # 输出 720,即 6 的阶乘
  • 示例

可以添加边界条件处理,当 n 为 0 或负数时返回相应结果。

python

from functools import reducedef factorial(n):if n < 0:return Noneif n == 0:return 1return reduce(lambda x, y: x * y, range(1, n + 1))print(factorial(-1))  # 输出 None
print(factorial(0))   # 输出 1
print(factorial(5))   # 输出 120

2. 什么是 lambda 函数? 有什么好处?

  • 要点

lambda 函数是一种匿名函数,语法简洁,通常用于编写简单的、一次性使用的函数。其好处包括代码简洁、适合临时使用和提高代码可读性。

python

# 普通函数定义
def add_numbers(a, b):return a + b# lambda 函数定义
add = lambda a, b: a + bprint(add(2, 3))  # 输出 5
  • 示例

lambda 函数常用于高阶函数,如 mapfilter 等。

python

numbers = [1, 2, 3, 4, 5]
# 使用 lambda 函数结合 map 计算每个数的平方
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 输出 [1, 4, 9, 16, 25]# 使用 lambda 函数结合 filter 筛选出偶数
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出 [2, 4]

3. 递归函数停止的条件是什么?

  • 要点

递归函数是在函数内部调用自身的函数,必须有停止条件,否则会导致无限递归和栈溢出错误。停止条件也称为递归的基准情况,是递归函数不再调用自身的情况。

python

def sum_numbers(n):if n == 0:  # 停止条件return 0return n + sum_numbers(n - 1)print(sum_numbers(5))  # 输出 15,计算 1 到 5 的和
  • 示例

递归函数可以用于解决许多问题,如斐波那契数列的计算。

python

def fibonacci(n):if n <= 1:  # 停止条件return nreturn fibonacci(n - 1) + fibonacci(n - 2)print(fibonacci(6))  # 输出 8,计算第 6 个斐波那契数

4. 如何理解设计模式,简要说明

  • 要点

设计模式是软件开发中针对反复出现的问题总结出的通用解决方案,有助于提高软件的可维护性、可扩展性和可复用性。常见的设计模式包括单例模式、工厂模式、观察者模式和装饰器模式等。

      1. 单例模式:确保一个类只有一个实例,并提供全局访问点。

python

class SingletonLogger:_instance = Nonedef __new__(cls):if not cls._instance:cls._instance = super().__new__(cls)return cls._instancelogger1 = SingletonLogger()
logger2 = SingletonLogger()
print(logger1 is logger2)  # 输出 True,说明是同一个实例

        2. 工厂模式:定义创建对象的接口,让子类决定实例化哪个类。

python

class Dog:def speak(self):return "Woof!"class Cat:def speak(self):return "Meow!"class AnimalFactory:def create_animal(self, animal_type):if animal_type == "dog":return Dog()elif animal_type == "cat":return Cat()factory = AnimalFactory()
dog = factory.create_animal("dog")
print(dog.speak())  # 输出 "Woof!"
  • 示例

设计模式在不同的应用场景中可以组合使用,以满足更复杂的需求。例如,在一个大型的游戏开发中,可以结合工厂模式创建游戏角色,使用单例模式管理游戏的全局状态。

5. 请手写一个单例

  • 要点

单例模式确保一个类只有一个实例,并提供全局访问点。可以通过多种方式实现,如类属性、装饰器等。

       1. 使用类属性实现单例

python

class DatabaseConnection:_instance = Nonedef __new__(cls):if not cls._instance:cls._instance = super().__new__(cls)return cls._instanceconn1 = DatabaseConnection()
conn2 = DatabaseConnection()
print(conn1 is conn2)  # 输出 True,说明是同一个实例

          2. 使用装饰器实现单例

python

def singleton(cls):instances = {}def get_instance():if cls not in instances:instances[cls] = cls()return instances[cls]return get_instance@singleton
class Config:passconfig1 = Config()
config2 = Config()
print(config1 is config2)  # 输出 True,说明是同一个实例
  • 示例

在多线程环境下,单例模式需要考虑线程安全问题。可以使用锁机制来确保在多线程环境下也能正确实现单例。

python

import threadingclass ThreadSafeSingleton:_instance = None_lock = threading.Lock()def __new__(cls):with cls._lock:if not cls._instance:cls._instance = super().__new__(cls)return cls._instance

6. 单例模式的应用场景有那些?

  • 要点

单例模式适用于需要确保资源唯一性和一致性的场景,如资源管理、配置管理、日志记录和 GUI 编程等。

      1. 资源管理:数据库连接池通常使用单例模式,确保系统中只有一个连接池实例,避免资源浪费和冲突。

python

import sqlite3class DatabaseConnectionPool:_instance = Nonedef __new__(cls):if not cls._instance:cls._instance = super().__new__(cls)cls._instance.conn = sqlite3.connect('example.db')return cls._instancepool1 = DatabaseConnectionPool()
pool2 = DatabaseConnectionPool()
print(pool1.conn is pool2.conn)  # 输出 True,说明是同一个连接

         2. 配置管理:应用程序的配置信息通常使用单例模式管理,确保所有模块使用相同的配置。

python

class AppConfig:_instance = Nonedef __new__(cls):if not cls._instance:cls._instance = super().__new__(cls)cls._instance.config = {'debug': True, 'port': 8080}return cls._instanceconfig1 = AppConfig()
config2 = AppConfig()
print(config1.config is config2.config)  # 输出 True,说明是同一个配置实例
  • 示例

在分布式系统中,单例模式的实现会更加复杂,可能需要借助分布式锁或共享存储来确保全局唯一性。

7. 什么是闭包?

  • 要点

闭包是指有权访问另一个函数作用域中变量的函数。即使该函数已经执行完毕,其作用域内的变量也不会被销毁,而是会被闭包所引用。

python

def outer_function(x):def inner_function(y):return x + yreturn inner_functionclosure = outer_function(10)
print(closure(5))  # 输出 15,闭包访问了 outer_function 中的变量 x
  • 示例

闭包可以用于实现数据的封装和隐藏,以及创建可定制的函数。

python

def multiplier(factor):def multiply(number):return number * factorreturn multiplydouble = multiplier(2)
triple = multiplier(3)print(double(5))  # 输出 10
print(triple(5))  # 输出 15

8. 函数装饰器有什么作用?

  • 要点

函数装饰器可以在不修改原函数代码的情况下,为函数添加额外的功能,实现代码复用和功能扩展,提高代码的可读性和可维护性。

python

def timer_decorator(func):import timedef wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")return resultreturn wrapper@timer_decorator
def slow_function():import timetime.sleep(2)slow_function()  # 输出函数执行时间
  • 示例

装饰器可以嵌套使用,为函数添加多个功能。

python

def uppercase_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result.upper()return wrapperdef exclamation_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result + "!"return wrapper@uppercase_decorator
@exclamation_decorator
def greet(name):return f"Hello, {name}"print(greet("Alice"))  # 输出 "HELLO, ALICE!"

9. 生成器,迭代器的区别?

  • 要点

迭代器是实现了 __iter__()__next__() 方法的对象,用于遍历序列;生成器是一种特殊的迭代器,可以通过生成器函数(使用 yield 关键字)或生成器表达式创建,具有惰性求值的特点,更节省内存。生成器表达式在处理大数据集时,内存使用效率更高,因为它是惰性求值的。

      1. 迭代器

python

my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator))  # 输出 1
print(next(my_iterator))  # 输出 2
print(next(my_iterator))  # 输出 3
try:print(next(my_iterator))
except StopIteration:print("No more elements")

         2. 生成器

python

def my_generator():yield 1yield 2yield 3gen = my_generator()
print(next(gen))  # 输出 1
print(next(gen))  # 输出 2
print(next(gen))  # 输出 3
try:print(next(gen))
except StopIteration:print("No more elements")
  • 示例

生成器表达式是一种更简洁的生成器创建方式,类似于列表推导式。

python

# 生成器表达式
gen_expr = (x ** 2 for x in range(5))
for num in gen_expr:print(num)  # 依次输出 0, 1, 4, 9, 16# 列表推导式
list_comp = [x ** 2 for x in range(5)]
print(list_comp)  # 输出 [0, 1, 4, 9, 16]

友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读

https://download.csdn.net/download/ylfhpy/90398541

相关文章:

Python常见面试题的详解12

1. hasattr ()、getattr ()、setattr () 函数是如何使用的&#xff1f; 要点 这三个函数用于对对象的属性进行检查、获取和设置操作&#xff0c;是 Python 中进行对象属性动态操作的重要工具。 hasattr()&#xff1a;用于检查对象是否具有指定属性或方法。 getattr()&#x…...

未来AI方向落地场景:小语言模型,super_private_agent

未来AI方向落地场景:小语言模型,super_private_agent 目录 未来AI方向落地场景:小语言模型,super_private_agent小语言模型super - private - agent(注重隐私的智能代理)碳基生命和硅基生命交互界面面向agent的专用交互协议和数据接口从web平台经济到网络平台举例说明社交…...

使用 PyTorch 实现标准卷积神经网络(CNN)

卷积神经网络&#xff08;CNN&#xff09;是深度学习中的重要组成部分&#xff0c;广泛应用于图像处理、语音识别、视频分析等任务。在这篇博客中&#xff0c;我们将使用 PyTorch 实现一个标准的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;并介绍各个部分的作用。 什…...

开题报告——基于Spring Boot的垃圾分类预约回收系统

关于本科毕业设计(论文)开题报告的规定 为切实做好本科毕业设计(论文)的开题报告工作,保证论文质量,特作如下规定: 一、开题报告是本科毕业设计(论文)的必经过程,所有本科生在写作毕业设计(论文)之前都必须作开题报告。 二、开题报告主要检验学生对专业知识的驾驭能…...

YOLOv5 目标检测优化:降低误检与漏检

1. 引言 在目标检测任务中&#xff0c;误检&#xff08;False Positive, FP&#xff09;和漏检&#xff08;False Negative, FN&#xff09;是影响检测性能的两个主要问题。误检意味着模型检测到了不存在的目标&#xff0c;而漏检则指模型未能检测到真实存在的目标。本文将介绍…...

网络安全治理模型

0x02 知识点 安全的目标是提供 可用性 Avialability机密性 confidentiality完整性 Integrity真实性 Authenticity不可否认性 Nonrepudiation 安全治理是一个提供监督、问责和合规性的框架 信息安全系统 Information Security Management System ISMS 策略&#xff0c;工作程…...

网络原理-

文章目录 协议应用层传输层网络层 数据链路层 协议 在网络通信中,协议是非常重要的概念.协议就是一种约定. 在网络通信过程中,对协议进行了分层 接下来就按照顺序向大家介绍每一种核心的协议. 应用层 应用层是咱们程序员打交道最多的一层协议.应用层里有很多现成的协议,但…...

HTML/CSS中交集选择器

1.作用:选中同时符合多个条件的元素 交集就是或的意思 2.语法:选择器1选择器2选择器3......选择器n{} 3.举例: /* 选中:类名为beauty的p元素,此种写法用的非常的多 */p.beauty{color: red;}/* 选中:类名包含rich和beauty的元素 */.rich.beauty{color: blue;} 4.注意: 1.有标签…...

机器学习(1)安装Pytorch

1.安装命令 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 2.安装过程Log&#xff1a; Looking in indexes: https://download.pytorch.org/whl/cu118 Co…...

Spring Boot过滤器链:从入门到精通

文章目录 一、过滤器链是什么&#xff1f;二、为什么需要过滤器链&#xff1f;三、Spring Boot中的过滤器链是如何工作的&#xff1f;&#xff08;一&#xff09;过滤器的生命周期&#xff08;二&#xff09;过滤器链的执行流程 四、如何在Spring Boot中定义自己的过滤器&#…...

vue3之echarts3D圆柱

vue3之echarts3D圆柱 效果&#xff1a; 版本 "echarts": "^5.1.2" 核心代码&#xff1a; <template><div ref"charts" class"charts"></div><svg><linearGradient id"labColor" x1"0&q…...

Redux中间件redux-thunk和redux-saga的具体区别是什么?

Redux 中间件是增强 Redux 功能的重要工具&#xff0c;redux-thunk 和 redux-saga 是两个常用的中间件&#xff0c;它们在处理异步操作和副作用时提供了不同的方式和理念。以下是两者的具体区别&#xff1a; 1. 概念与设计理念 redux-thunk 简洁&#xff1a;redux-thunk 是一…...

代码随想录算法训练营第四十三天| 动态规划06

322. 零钱兑换 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物品。 这句话结合本题 大家要好好理解。 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包最少的物品件数是多少&…...

UI自动化教程 —— 元素定位技巧:精确找到你需要的页面元素

引言 在UI自动化测试中&#xff0c;准确地定位页面元素是至关重要的。无论是点击按钮、填写表单还是验证页面内容&#xff0c;都需要首先找到相应的页面元素。Playwright 提供了多种方法来实现这一点&#xff0c;包括使用CSS选择器和XPath进行元素定位&#xff0c;以及利用文本…...

MySQL六大日志的功能介绍。

前言 首先&#xff0c;MySQL的日志应该包括二进制日志&#xff08;Binary Log&#xff09;、错误日志&#xff08;Error Log&#xff09;、查询日志&#xff08;General Query Log&#xff09;、慢查询日志&#xff08;Slow Query Log&#xff09;、重做日志&#xff08;Redo …...

二级指针略解【C语言】

以int** a为例 1.二级指针的声明 a 是一个指向 int*&#xff08;指向整型的指针&#xff09;的指针&#xff0c;即二级指针。 通俗的讲&#xff0c;a是一个指向指针的指针&#xff0c;对a解引用会是一个指针。 它可以用于操作动态分配的二维数组、指针数组或需要间接修改指针…...

鸿蒙状态管理概述

状态管理 状态管理之v1LocalStorageLocalStorageLink的框架行为LocalStorageProp的框架行为LocalStorage使用场景 AppStorageStorageLink的框架行为StorageProp的框架行为AppStorage的使用场景 PersistentStorageEnvironmentEnvironment内置参数 WatchWatch的使用场景 $$语法$$…...

【核心算法篇十三】《DeepSeek自监督学习:图像补全预训练方案》

引言:为什么自监督学习成为AI新宠? 在传统监督学习需要海量标注数据的困境下,自监督学习(Self-Supervised Learning)凭借无需人工标注的特性异军突起。想象一下,如果AI能像人类一样通过观察世界自我学习——这正是DeepSeek图像补全方案的技术哲学。根据,自监督学习通过…...

由浅入深学习大语言模型RLHF(PPO强化学习- v1浅浅的)

最近&#xff0c;随着DeepSeek的爆火&#xff0c;GRPO也走进了视野中。为了更好的学习GRPO&#xff0c;需要对PPO的强化学习有一个深入的理解&#xff0c;那么写一篇文章加深理解吧。纵观网上的文章&#xff0c;要么说PPO原理&#xff0c;各种复杂的公式看了就晕&#xff0c;要…...

网络安全三件套

一、在线安全的四个误解     Internet实际上是个有来有往的世界&#xff0c;你可以很轻松地连接到你喜爱的站点&#xff0c;而其他人&#xff0c;例如黑客也很方便地连接到你的机器。实际上&#xff0c;很多机器都因为自己很糟糕的在线安全设置无意间在机器和系统中留下了“…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...