Python面试必知100题【1~5题】

news/2024/11/6 15:26:00/

Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是1~5道题。

一、请说下Python有哪些特点

  1. Python是一种解释型语言,这意味着开发过程中没有了编译这个环节。
  2. 面向对象:Python支持面向对象的风格或代码封装在对象的编程技术。
  3. 动态类型语言:在Python中,你不需要预先声明变量的类型,当你赋值给变量时,解释器会自动知道其类型。
  4. 跨平台语言:Python可以在大多数的操作系统上运行,包括但不限于Windows、Linux、Unix等。

二、什么是可变数据类型和不可变数据类型

在Python中,数据类型可以分为两种:可变数据类型和不可变数据类型。
不可变数据类型:这种数据类型的值一旦定义,就不能更改。如果尝试更改其值,实际上会创建一个新的对象。不可变数据类型的例子包括整数、浮点数、字符串、元组
例如,如果你有一个字符串变量,你不能更改这个字符串中的某个字符。试图这样做的话,Python会创建一个新的字符串。
可变数据类型:与不可变数据类型相反,可变数据类型的值是可以更改的。也就是说,你可以在不创建新对象的情况下更改对象的值。可变数据类型的例子包括列表、字典以及集合
例如,如果你有一个列表,你可以更改列表中的元素,增加元素,或者删除元素,而不需要创建一个新的列表。

三、什么是生成器

在Python中,生成器(Generator)是一种特殊的迭代器。与列表不同,生成器在存储数据时可以节省大量内存。这是因为生成器并不真正存储所有的值在内存中,而是在迭代到某个值时才会生成该值。
生成器的创建通常使用两种方式:一种是通过在函数中使用yield关键字,另一种是使用生成器表达式(generator expression)。
使用yield关键字创建生成器:
当Python执行到yield关键字时,它会将结果返回给调用者,并记住这个位置。下次调用生成器的时候,它将从上次离开的位置继续执行。

def count_up_to(n):count = 1while count <= n:yield countcount += 1for number in count_up_to(5):print(number)# 输出
1
2
3
4
5

上面的代码定义了一个生成器函数count_up_to,它会生成从1到n的数字。然后,我们可以像迭代其他迭代器一样迭代这个生成器。
使用生成器表达式创建生成器:
生成器表达式类似于列表解析式,但是它创建的是一个生成器,而不是一个列表。这意味着它可以节省内存。生成器表达式的语法是将列表解析式的方括号改为圆括号。

numbers = (x for x in range(1, 6))for number in numbers:print(number)

上面的代码创建了一个生成器,它会生成从1到5的数字。然后,我们可以像迭代其他迭代器一样迭代这个生成器。

四、什么是迭代器?

在Python中,迭代器(Iterator)是一个可以记住遍历的位置的对象。迭代器对象必须实现两个特殊方法,即**iter()next()**,它们共同构成了迭代器协议。迭代器可以是有限的也可以是无限的。

  • **iter()**方法返回迭代器对象本身。这用在for和in语句中。
  • next()方法返回迭代器的下一个值。如果没有更多的项可以返回,则应该抛出StopIteration异常。

举个例子,我们可以创建一个返回数字序列的迭代器:

class Counter:def __init__(self, limit):self.limit = limitself.count = 0def __iter__(self):return selfdef __next__(self):if self.count < self.limit:self.count += 1return self.countelse:raise StopIterationcounter = Counter(5)
for number in counter:print(number)

在这个例子中,Counter类是一个迭代器,可以产生从1到5的数字。首先,我们创建一个Counter对象,并将其上限设为5。然后,我们使用for循环来迭代这个迭代器。
值得注意的是,生成器是一种特殊的迭代器,它更简单,但功能也更强大。你可以使用yield关键字来定义一个生成器,或者使用圆括号的列表解析式来创建一个生成器表达式。

五、生成器和迭代器有什么区别?

生成器和迭代器在Python中都用于创建可以进行迭代的对象,但它们之间有一些主要区别:

  1. 定义方式:迭代器需要定义一个类,并在类中实现**iter()next()**方法。而生成器则可以直接使用一个函数,通过yield语句返回每个迭代的值。
  2. 简单性:相比之下,生成器的定义更简单。你只需要一个函数,就可以通过yield关键字生成值。而迭代器则需要更多的代码来定义类和方法。
  3. 资源使用:生成器和迭代器都是懒加载(lazy load)的,也就是说它们只有在需要返回值的时候才会生成值。但是生成器更进一步,它们在生成值后不会保存这些值。这意味着如果你需要迭代的数据集很大,或者如果你需要的值需要大量计算,那么生成器可能会比迭代器更节省资源。
  4. 使用场景:迭代器更适用于需要自定义复杂行为的情况,而生成器更适用于需要遍历大数据集或复杂数据流的情况。

总的来说,生成器是一种特殊的迭代器,它的定义更简单,也更容易使用,但同时也继承了迭代器的主要特性。


http://www.ppmy.cn/news/350694.html

相关文章

如何在素材中心中下载字体并安装?

前置准备&#xff1a; 文本组件 具体步骤&#xff1a; 进入 字体素材中心 下载安装字体 应用字体 步骤分解&#xff1a; 进入字体素材中心 选中文本组件 点击检查器面板的样式 选择字体设置 点击字体素材中心 下载安装字体 进入字体素材页面 点击 Install 安装 应…

【3DsMAX】从零开始建房(7)

目录 1. 制作屋顶小船剩余部分 2. 制作小广告牌 1. 制作屋顶小船剩余部分 新建一个平面 长度分段设置为1 转换成可编辑多边形后&#xff0c;对边进行缩放 同样的方法再添加一个平面 添加“壳” 新建一个圆柱体作为桅杆 选中圆柱的底面&#xff0c;点击插入 挤出 将顶部的点缩…

字体压缩工具

方法1&#xff1a;sfnttool sfnttool.jar是Google开源项目sfntly中的一个工具可以对指定字体提取出想要的文字&#xff0c;导出更小体积的字体 下载地址&#xff1a;https://github.com/googlefonts/sfntly 这个必须在有java环境中去允许。所以没有java环境的可以先安装java环…

谷歌字体下载安装(感觉没有很好用)

此教程为谷歌字体下载教程。 结论总结&#xff1a; 不好用原因主要是中文字体库不全&#xff0c;其他语言字体还是可以的。 步骤&#xff1a; 前提&#xff1a;科学上网 1、打开https://fonts.google.com/&#xff0c;语言选择为【Chinese(simplified)】即简体中文&#x…

wine设置中文字体(解决中文字体丢失或白方块)

注意字无法显示和显示为乱码是不同的症状&#xff0c;如果看到乱码&#xff0c;请确保系统语言和运行Wine时的语言环境一致。如果有汉字丢失或显示为方框&#xff0c;请继续阅读本文。 中文 解决中文无法显示问题有三种思路&#xff1a;字体链接、字体替换或直接提供相应字体。…

WoW 游戏软件

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 我们选择Tcp协议进行传输&#xff0c;之所以采用tcp,首先是因为tcp传输稳定&#xff0c;相比于udp不稳定的传输&#xff0c;tcp能确保消息一定传输出去。然后是tcp有服务器&#xff0c;相比于 p2p 无服务器模型&#xff0c;tc…

LoadRunner 2023 下载和安装

下载 LoadRunner目前最新的版本是2023版&#xff0c;需要到Micro Focus公司的官网注册账号然后申请下载&#xff0c;比较麻烦&#xff0c;这里我把大家常用的社区版本&#xff0c;搬运到阿里云盘上&#xff0c;供下载&#xff1a; https://www.aliyundrive.com/s/WtHSzD4MrXw …

【C++从入门到放弃】list深度剖析及模拟实现

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《C从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; list …