Python面试高频100题【11~15题】
Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是11~15道题。
十一、请介绍下Python中单下划线与双下划线区别
在Python中,单下划线和双下划线主要用于命名变量和方法,而它们具有不同的含义。
- 单下划线 _ :
- 单下划线开头(例如 _var)是一种约定,用来指示这个名称是供内部使用的。它告诉读代码的人该变量或者方法主要被用于类或模块的内部,尽管Python并不会真正地阻止你在外部访问它。
class MyClass:def __init__(self):self._internal_var = 10def internal_method(self):passobj = MyClass()
print(obj._internal_var) # 可以访问,但是应该避免这么做
- 双下划线 __ :
- 双下划线开头(例如 __var)表示这个变量或方法不仅仅是用于内部,Python会对其进行名称修饰(name mangling),用来避免命名冲突。这意味着类定义中以双下划线开头的名称如 __var 实际上会被改写为 _classname__var。
class MyClass:def __init__(self):self.__internal_var = 10obj = MyClass()
print(obj.__internal_var) # 这会引发AttributeError错误
print(obj._MyClass__internal_var) # 这样可以访问
双下划线开头和结尾的变量(例如 var)是特殊变量,它们有特殊的含义,这些变量通常被称为"魔术"变量或方法。比如 init、str 等。
class MyClass:def __init__(self, value):self.value = valuedef __str__(self):return f"MyClass with value {self.value}"obj = MyClass(10)
print(obj) # 输出:MyClass with value 10
十二、一个服务器有4GB的内存,怎么去读取5GB 的数据?
当需要处理的数据集大于可用内存时,我们不能一次性将所有数据加载到内存中。但我们可以使用一些策略来处理这种情况:
- 分块处理(Chunking):这种方法涉及到将数据分割成小块,每次只读取一部分到内存中进行处理。例如,如果你正在处理一个大文件,你可以使用Python的文件读取方法,如read(size)或readline(),每次只读取一部分数据。
- 流处理(Streaming):如果数据可以按照某种顺序处理,你可以使用流处理,也就是一次处理一个数据项,然后丢弃它,再处理下一个。这种方式常常用于处理日志文件或网络流等。
- 使用内存映射文件:内存映射文件是一种将文件的一部分或全部映射到内存空间的技术,使得这部分文件能够像内存一样被访问。Python的mmap模块提供了这种功能。但需要注意的是,这种方法适用于随机访问文件,不适合顺序读取大文件。
- 使用分布式计算:如果数据非常大,而且不能在单机上处理,那么可以考虑使用分布式计算框架,如Hadoop或Spark,将数据分布在多个机器上进行处理。
十三、如何对列表中的元素进行去重?
在Python中,对列表进行去重的一个常见方法是使用set数据结构,然后再转回到list。因为在set中,所有元素都是唯一的。以下是一个简单的代码示例:
def remove_duplicates(lst):return list(set(lst))original_list = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9]
print(remove_duplicates(original_list)) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
需要注意的是,使用set进行去重会丢失原始列表的顺序。如果你希望保留元素的顺序,你可以使用dict从Python 3.7开始,字典保持了插入顺序,所以我们可以通过将列表元素作为字典的键来达到去重且保持顺序的效果。
def remove_duplicates_keep_order(lst):return list(dict.fromkeys(lst))original_list = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9]
print(remove_duplicates_keep_order(original_list)) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
十四、如果列表里面的元素是字典,怎么对列表里面的元素进行去重?
在Python中,列表的元素如果是字典的话,通常情况下不能直接进行去重,因为字典是不可哈希的(unhashable),不能被用作集合(set)或字典的键。但我们可以通过一些其他的方法来去重。
- 使用json序列化:我们可以先将字典转化为JSON字符串,然后添加到集合(set)中,因为集合会自动去重。然后再将去重后的JSON字符串转回字典。
import json# 列表中的元素是字典
list_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": 2}, {"a": 3, "b": 4}]# 初始化一个空集合来存储json字符串
json_set = set()# 遍历列表中的每个字典
for d in list_of_dicts:# 将字典转化为排序后的json字符串,然后添加到集合中json_set.add(json.dumps(d, sort_keys=True))# 初始化一个空列表来存储去重后的字典
unique_dicts = []# 遍历集合中的每个json字符串
for i in json_set:# 将json字符串转回字典,然后添加到列表中unique_dicts.append(json.loads(i))print(unique_dicts)
- 使用元组作为键:
# 列表中的元素是字典
list_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": 2}, {"a": 3, "b": 4}]# 初始化一个空集合来存储元组
tuple_set = set()# 遍历列表中的每个字典
for d in list_of_dicts:# 将字典的键值对排序后转化为元组,然后添加到集合中tuple_set.add(tuple(sorted(d.items())))# 初始化一个空列表来存储去重后的字典
unique_dicts = []# 遍历集合中的每个元组
for t in tuple_set:# 将元组转回字典,然后添加到列表中unique_dicts.append(dict(t))print(unique_dicts)
十五、请列举一些正则相关的用法
正则表达式是处理字符串的强大工具,它可以用于匹配、查找、替换特定模式的字符串。Python中的re模块提供了正则表达式相关的操作。
以下是一些基本的正则表达式的使用方法:
- 查找匹配的字符串:**re.search()**函数会在字符串中搜索匹配正则表达式的第一个位置,并返回一个匹配对象,如果没有找到匹配的则返回None。
import reresult = re.search('Python', 'I love Python')
if result:print("Match found")
else:print("Match not found")
- 查找所有匹配的字符串:**re.findall()**函数会返回一个列表,包含字符串中所有匹配正则表达式的部分。
import reresult = re.findall('a', 'I am a Python developer')
print(result) # 输出:['a', 'a', 'a']
- 替换匹配的字符串:**re.sub()**函数会将字符串中匹配正则表达式的部分替换为指定的字符串。
import reresult = re.sub('Python', 'Java', 'I am a Python developer')
print(result) # 输出:'I am a Java developer'
- 分割字符串:**re.split()**函数可以按照正则表达式匹配的部分来分割字符串。
import reresult = re.split('\s', 'I am a Python developer')
print(result) # 输出:['I', 'am', 'a', 'Python', 'developer']
- 编译正则表达式:如果你有一个正则表达式需要重复使用,那么可以使用**re.compile()**来提前编译这个正则表达式,这样可以提高效率。
import repattern = re.compile('Python')
result = pattern.search('I love Python')
print(result.group()) # 输出:'Python'
以上都是一些基本的用法,实际上正则表达式的功能远不止于此,它有很多的匹配模式和特殊序列可以用于处理复杂的字符串匹配和操作。
关注我,后续题目不断更新中
相关文章:
Python面试高频100题【11~15题】
Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是11~15道题。 十一、请介绍下Python中单下划线与双下划线区别 在Python中,单下划线和双下划线主要用于命名变量和方法,而它们具有不…...

Linux下Redis 存储
命令使用 目录 命令使用 RDB持久化 AOF持久化 yum安装 [rootlocalhost ~]# yum -y install redis 已加载插件:fastestmirror Loading mirror speeds from cached hostfile* c7-media: * epel: ftp.yz.yamagata-u.ac.jpvim到文件etc/redis.conf 取消注释requirep…...

QML 快速上手3 - QuickControl2
目录 QuickControl2简介风格设置control 配置文件图像浏览器案例component 组件报错问题StackViewSwipeView QuickControl2 简介 quickcontrol 用于快速构建风格化的用户界面 它包括了以下几个预制的组件风格 Default QT 默认风格Universal windows 桌面风格Material 谷歌推…...

QT Creator写一个简单的电压电流显示器
前言 本文主要涉及上位机对接收的串口数据处理,LCD Number控件的使用。之前的一篇写一个简单的LED控制主要是串口发出数据,这里再看一下怎么接收数据处理数据,这样基本就对串口上位机有简单的认识了。 LCD Number显示时间 这一小节通过用一…...
前端需要的技能
语言: 1,熟练掌握html5,css3,javascript,ajax 2,掌握PHP、java、python中至少一种web开发语言 3,库/框架:MooTools,YUI,Angular,jQuery,Dojo. 4,UI框架:BootStrap,Founda…...
Qt——Qt控件之基于模型的项目视图组-QTreeView树形视图控件的使用总结(Qt仿word标题列表的实现)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》...

spring boot框架步骤
目录 1. 创建一个新的Spring Boot项目2. 添加所需的依赖3. 编写应用程序代码4. 配置应用程序5. 运行应用程序6. 编写和运行测试7. 部署应用程序 总结 当使用Spring Boot框架开发应用程序时,以下是一些详细的步骤: 1. 创建一个新的Spring Boot项目 使用…...
动态创建select
1.动态创建select function createSelect(){ var mySelect document.createElement("select"); mySelect.id "mySelect"; document.body.appendChild(mySelect); } 2.添加选项option function addOption(){ //根据id查找对象, var objdoc…...

linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘
linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘 查看当前磁盘空间 根目录 / 下也只有44G,其他目录只有10几G,正式环境肯定不够用 df -h查看硬盘数量和分区情况 fdisk -l查看到/dev/vdb 有500多G了 将/dev/vdb在分出一个区使用 第一步:编辑分区。执行命令fdisk …...

STM32软件定时器
目录 什么是定时器? 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 …...

[论文阅读] (30)李沐老师视频学习——3.研究的艺术·讲好故事和论点
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...
Java中List、Set、Map的区别和实现方式
Java中List、Set、Map的区别和实现方式 List List 是一个有序的集合,即元素按照插入的顺序进行排序,可以有重复的元素。因为是有序的,所以可以根据下标来获取元素或者遍历整个集合内的元素。常用的实现类包括 ArrayList 和 LinkedList。 A…...

@EnableScheduling和@Scheduled注解详解fixedrate和fixeddelay的区别
一、pom.xml中导入必要的依赖: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version></parent><dependencies><…...

打印金字塔图案总结
那么好了好了,宝子们,今天给大家总结一下“打印金字塔图案”,来吧,开始整活!⛳️ 最近在牛客网上刷题,遇到了这个打印类型的题目,我想总结一下,然后分享给大家。 一、正向金字塔 …...
SQL语句的执行顺序
1、SQL语句的一般执行顺序 1 from 找表 2 on 关联条件帅选 3 join 关联表操作 4 where 条件筛选 5 group by 进行分组 6 avg,sum… 执行函数 7 having 分组后筛选 8 select …...

Debian 版本代号与《玩具总动员》
作为最受欢迎的 Linux 发行版之一,Debian 是许多其他发行版的基础,许多非常受欢迎的 Linux 发行版,例如 Ubuntu、Knoppix、PureOS 、Tails、Armbian 以及 Raspbian,都基于 Debian。 经过近 20 个月的开发,2023 年 6 月…...
TypeScript 第一章
欢迎来到 TypeScript 学习!本章将为您介绍 TypeScript 的基础知识。 TypeScript 是 JavaScript 的一个超集,它提供了静态类型检查、类、接口等特性,使得编写大型应用程序变得更加容易和可维护。TypeScript 编写的代码可以被编译成 JavaScript…...

【SpringCloud入门】-- Ribbon入门
1.什么是Ribbon? Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式&…...

(二)Liunx下ElasticSearch快速搭建
1.下载安装 1)环境准备: 操作系统:centos7 es版本:8.8.1 jdk:17 es与jdk等兼容支持查看 2)下载安装包上传到服务器,官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3)解压文件…...

神经网络编程基础
目录 1、二分类(Binary Classification) 2、逻辑回归(Logistic Regression) 3、逻辑回归的代价函数(Logistic Regression Cost Function) 4、梯度下降法(Gradient Descent) 5、使用计算图求导数 6、逻辑回归中的梯度下降&…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...