附答案|2024最新Python面试题之Python基础(3)

写在之前

Python 面试的时候会涉及到很多的八股文,我准备连载一个新的系列【最新Python面试题】

这些面试题是我结合自身经验,以及搜集整理的企业面试真题,主要有以下几个方面:

  • Python基础
  • Python机制
  • Python面向对象
  • Python笔试题
  • Python算法
  • Django框架
  • Flask框架
  • 其他开源框架
  • Scrapy数据爬虫
  • Python正则式
  • Python数据分析
  • Pandas框架
  • Python拓展知识(数据结构,常见算法,数据库原理及调优,中间件…)

虽然这些是面试“八股文”,但是只会背答案与流畅的并能结合自身思考的回答,对于面试官来说还是有很大区别的。

所以除了在每道面试题后会提供仔细整理和验证后的答案以外,在每篇文章中会挑选一道难度高且重点的题目做详细的讲解

希望大家不但能知其然也可以知其所以然,在面试的时候让面试官眼前一亮,这样白花花的offer不就到手了嘛

每天会更新10道题左右,无论是准备面试还是自己学习,这份面试题绝对值得你去看

大家可以关注我,再关注我,使劲关注我,不要错过每天的更新~

1.介绍一下Python的str对象的方法?

  • capitalize()
    • 将字符串的第一个字符转换为大写,其余字符转换为小写。
  • casefold()
    • 进行全小写转换,比 lower() 更为激进,能够处理特殊字符。
  • center(width[, fillchar])
    • 返回一个原字符串居中的字符串,宽度为 width,不足部分用 fillchar 填充。
  • count(substring[, start[, end]])
    • 返回子字符串 substring 在字符串中出现的次数,可以指定开始和结束位置。
  • encode([encoding[, errors]])
    • 将字符串编码为指定编码的字节串,如 utf-8
  • endswith(suffix[, start[, end]])
    • 检查字符串是否以 suffix 结尾,返回布尔值。
  • expandtabs([tabsize])
    • 将字符串中的制表符(\t)扩展为一定数量的空格,默认为 8 个。
  • find(substring[, start[, end]])
    • 查找子字符串 substring 在字符串中的位置,返回索引,如果未找到则返回 -1
  • format([format_spec])
    • 进行字符串格式化,可以包含格式化规范。
  • format_map([mapping])
    • 类似于 format(),但使用字典或类似的映射对象进行格式化。
  • index([substring[, start[, end]])
    • find() 类似,但如果没有找到子字符串,会抛出 ValueError
  • isalnum()
    • 检查字符串是否至少有一个字符,并且所有字符都是字母或数字。
  • isalpha()
    • 检查字符串是否所有字符都是字母。
  • isdigit()
    • 检查字符串是否所有字符都是数字。
  • islower()
    • 检查字符串是否所有字符都是小写。
  • isupper()
    • 检查字符串是否所有字符都是大写。
  • istitle()
    • 检查字符串是否符合标题的格式,即每个单词的首字母大写。
  • isspace()
    • 检查字符串是否所有字符都是空白字符。
  • join(iterable)
    • 将迭代器中的元素连接成一个字符串,元素之间用调用 join() 的字符串分隔。
  • lower()
    • 将字符串中的所有大写字符转换为小写。
  • lstrip([chars])
    • 去除字符串左侧的空白字符或指定字符。
  • rstrip([chars])
    • 去除字符串右侧的空白字符或指定字符。
  • strip([chars])
    • 去除字符串两侧的空白字符或指定字符。
  • replace(old, new[, count])
    • 将字符串中的 old 子字符串替换为 new 子字符串,可以指定替换次数。
  • split(sep=None, maxsplit=-1)
    • 按照指定分隔符 sep 将字符串分割为一个列表,可以指定最大分割次数。
  • splitlines([keepends])
    • 按照行分割字符串,返回一个包含各行的列表。
  • startswith(prefix[, start[, end]])
    • 检查字符串是否以 prefix 开头,返回布尔值。
  • swapcase()
    • 将字符串中的大写字符转换为小写,小写字符转换为大写。
  • title()
    • 将字符串的每个单词的首字母转换为大写,其他字母转换为小写。
  • upper()
    • 将字符串中的所有小写字符转换为大写。
  • zfill(width)
    • 将字符串用 0 填充到指定的宽度,填充总是在左侧进行。

2.Python列表与元组的区别是什么?分别在什么情况下使用?

列表(List)的特点:

  1. 可变(Mutable):列表的内容可以在创建后修改,可以添加、删除或更改其中的元素。
  2. 有序:列表保持元素的顺序,可以通过索引访问。
  3. 允许重复:列表中的元素可以重复。
  4. 使用方括号:列表使用方括号 [] 定义,例如 my_list = [1, 2, 3]
  5. 支持动态扩展:可以在运行时根据需要扩展列表的大小。

元组(Tuple)的特点:

  1. 不可变(Immutable):元组的内容在创建后不能修改,不能添加、删除或更改其中的元素。
  2. 有序:元组同样保持元素的顺序,可以通过索引访问。
  3. 不允许重复:元组中的元素不允许重复,但可以包含可变对象,如列表。
  4. 使用圆括号:元组使用圆括号 () 定义,或者直接省略括号,例如 my_tuple = (1, 2, 3)my_tuple = 1, 2, 3
  5. 内存效率:由于不可变性,元组通常在内存使用上比列表更高效。

使用场景:

列表(List)

  • 当你需要一个可以修改的数据集合时,应该使用列表。
  • 列表适用于数据项需要动态改变的情况,如添加、删除元素或对元素进行各种操作。
  • 在需要实现数组或类似数组结构的场景中使用列表。
  • 列表也常用于实现算法和数据结构,如链表、栈、队列等。

元组(Tuple)

  • 当你需要一个不应被修改的数据集合时,应该使用元组。
  • 元组适用于保护数据不被改变的场景,可以作为其他数据结构(如字典的键)的一部分。
  • 在函数需要返回多个值时,使用元组可以方便地打包和返回多个结果。
  • 元组常用于存储不应更改的数据,如配置数据或固定集合。

3.阐述decorator的用法和它的应用场景?

在 Python 中,装饰器(Decorator)是一种设计模式,用于在不修改原有函数或方法代码的情况下,给函数或方法添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数并返回一个新的函数。

日志记录:在函数调用前后添加日志记录,用于调试或记录操作。
性能测试:测量函数执行时间,用于性能分析。
权限校验:在函数执行前检查用户权限,确保安全性。
缓存:缓存函数的结果,避免重复计算。
参数校验:在函数执行前校验输入参数的有效性。
事务处理:在数据库操作函数前后添加事务开始和提交或回滚。
异步编程:将同步函数转换为异步函数。

4.介绍一下Python Date Time方面的类?

  • date
    • 表示一个特定的日期,如年、月、日。
    • 属性包括:yearmonthday
  • time
    • 表示一天中的时间,包括时、分、秒和微秒。
    • 属性包括:hourminutesecondmicrosecond
  • datetime
    • 结合了 datetime,表示一个特定的日期和时间。
    • 属性包括:yearmonthdayhourminutesecondmicrosecond
  • timedelta
    • 表示两个日期或时间之间的差,即一个时间跨度。
    • 属性包括:dayssecondsmicroseconds
  • tzinfo
    • 这是一个抽象的基类,用于表示时区信息。
    • 实际使用时,通常会使用 pytz 库或 Python 3.2 以上版本中的 timezone 类来处理时区。
  • timezone(Python 3.2+):
    • datetime 的一个子类,用于表示带有时区信息的日期和时间。

5.Python中的模块和包是什么?

  • 模块(Module)
    • 单个 .py 文件:一个模块通常是一个 .py 文件,它包含了 Python 代码。例如,一个名为 mymodule.py 的文件就是一个模块。
    • 组织代码:模块允许你将相关的函数和类组织在一起,这样可以在不同的程序中重用这些代码。
    • 命名空间:模块在导入时会创建一个命名空间,这个命名空间包含了模块中定义的所有名称(函数、类、变量等)。
    • 导入:你可以使用 import 语句来导入模块,然后在你的程序中使用模块中定义的名称。
  • 包(Package)
    • 目录结构:一个包是一个包含一个 __init__.py 文件的目录,这个文件可以是空的,它告诉 Python 这个目录应该被视为一个包。
    • 层次结构:包可以包含其他包,形成一个层次结构,这允许你创建复杂的代码库。
    • 导入:你可以使用 import 语句来导入包中的模块,或者使用 from ... import ... 语句来直接导入包中的特定名称。
    • 命名空间:包有自己的命名空间,它允许你创建具有相同名称的不同模块,只要它们位于不同的包中

6.简述什么是PEP8?

PEP 8 是 Python 编程语言的一种风格指南,它提供了关于如何编写清晰、可读性强的 Python 代码的指导。PEP 8 的全称是 "Python Enhancement Proposal 8",即 "Python 增强提案第8号"。这个提案由 Barry Warsaw 于 2001 年撰写,目的是统一 Python 社区中的代码风格。
PEP 8 包括了一系列关于代码格式化的规则,如缩进、行长度、空格使用、命名规则等

7.**简述Python异常处理 **

Python中的异常处理是一种结构,用于捕获和处理程序执行中发生的异常(错误)。异常处理允许程序在遇到错误时控制流程,而不是立即崩溃。Python 使用 tryexceptelsefinally 语句进行异常处理。

8.Python里面search()和match()的区别?

match()

  • match() 尝试从字符串的起始处匹配正则表达式模式。
  • 它只在字符串的开始处进行匹配检查,如果模式匹配了字符串的开始部分,则返回一个匹配对象;否则,返回 None
  • 由于 match() 只在字符串的开始进行匹配,因此它对于检查字符串是否以特定模式开始非常有用。

search()

  • search() 扫描整个字符串,寻找正则表达式模式的第一次出现。
  • 它返回第一个成功的匹配。如果没有找到匹配,它将返回 None
  • search() 对于在字符串中的任意位置查找模式非常有用,不仅仅是开始部分。

9.Python如何取整数的绝对值?

这可以通过abs()函数来完成。

abs(2)
#=> 2
abs(-2)
#=> 2

重点题详解

阐述什么是pickling和unpickling ?

在Python中,"pickling"和"unpickling"是两种与对象序列化和反序列化相关的过程,它们通过pickle模块实现。

  1. Pickling

    • Pickling是将Python对象转换为字节流的过程,这个字节流可以保存到文件中,或者通过网络发送到其他计算机。这个过程通过pickle模块的dump()dumps()函数实现。

    • dump()函数将对象序列化并写入到一个文件中,而dumps()函数将对象序列化为一个字节字符串。

    • 例如,使用pickle.dump()函数将数据序列化到文件的代码如下:

      import pickle
      data = {"name": "Alice", "age": 30}
      with open("data.pkl", "wb") as file:
          pickle.dump(data, file)
      
    • Pickling允许保存复杂的Python对象,包括自定义类的实例。

  2. Unpickling

    • Unpickling是将字节流转换回Python对象的过程,这通常用于从文件中读取之前序列化的对象。

    • load()函数从文件中读取字节流并反序列化成Python对象,而loads()函数将字节字符串反序列化为对象。

    • 例如,使用pickle.load()函数从文件中加载数据的代码如下:

      import pickle
      with open("data.pkl", "rb") as file:
          data = pickle.load(file)
      
    • Unpickling时,必须能够访问对象的类定义,否则无法正确还原对象。

区别

  • Pickling是序列化过程,用于创建对象的字节流表示。
  • Unpickling是反序列化过程,用于从字节流中恢复对象。

安全性

  • 使用pickle模块时需要注意安全性,因为反序列化恶意构造的数据可能导致代码执行。因此,只应对可信的数据进行unpickling。

与JSON的比较

  • JSON是一种文本基础的数据交换格式,易于人阅读和编写,也易于机器解析和生成。它是一种轻量级的数据交换语言,不仅用于Python,也广泛用于其他编程语言。
  • Pickle是Python特有的二进制序列化格式,不适合跨语言使用,且不可读。
  • JSON通常用于存储和传输文本信息,而pickle用于存储复杂的Python对象。

在实际应用中,如果需要跨语言或跨平台的数据交换,推荐使用JSON。如果仅在Python内部进行数据持久化,且需要存储复杂的对象结构,可以使用pickle。但要注意,pickle数据不应该来自不可信的源,以避免潜在的安全风险。

更多资料干货、行业内幕 长期免费更新中!
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值