python 必pass,这几个问题搞不明白,建议还是不要去面试了!

2023-12-19

1、 可迭代对象

在 python 中我们可以通过 for 循环来遍历列表,元组,这种遍历我们称为迭代(Iteration)。在 python 中凡是可以通过 for ... in 进行迭代的对象,它就是可迭代对象。

1.1 如何判断一个对象是可迭代对象
from collections.abs import Iterable
isinstance('abc', Iterable)
1.2 迭代协议

python 中对象要提供迭代支持,必须定义一个 __iter__ 方法,这个方法返回一个迭代器对象。

2、 迭代器(Iterator)

前面我们讲过可以通过 for 循环迭代的对象称为可迭代对象: Iteralbe

在底层 for 循环是先通过内置函数 iter() 将可迭代对象转换成一个迭代器,然后将其传入 next() 函数调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili 【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。 icon-default.png?t=N7T8 https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

In [8]: ls = [1,2,3]
In [9]: ls = iter(ls)
In [10]: ls
Out[10]: <list_iterator at 0x225a33d8bb0>
In [11]: next(ls)
Out[11]: 1
In [12]: next(ls)
Out[12]: 2
In [13]: next(ls)
Out[13]: 3
In [14]: next(ls)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-14-2a26c7e4d7fa> in <module>
----> 1 next(ls)
StopIteration:  

所以可以被 next() 函数调用并不断返回下一个值的对象称为迭代器: Interator

2.1 如何判断一个对象是迭代器对象
from collections.abc import Iterator
ls = [1,2,3]
ls = iter(ls)
isinstance(ls, Iterator)
2.2 迭代器协议

迭代器对象自身需要支持以下两个方法,它们共同组成了迭代器协议:

  • iterator.__inter__()

    返回迭代器对象本身。

  • iterator.__next__()

    从对象中返回下一个值。如果没有可返回值,则引发 StopIteration 异常。

2.3 迭代器的作用

python 中迭代器对象表示的是一个数据流,迭代器对象可以被 next() 函数不断调用返回下一个数据,直到没有数据抛出 StopIteration 异常。

这个数据流像一个列表,但我们却不能提前知道它的长度,只能不断通过 next() 函数实现按需计算下一个数据,迭代器的计算是惰性的,只有在需要返回下一个数据时,它才会计算。

迭代器可以表示一个无限大的数据流,例如全体自然数,而使用 list 是永远不可能存储全体自然数的。

3、 生成器

在 python 中创建元素数量巨大的列表不仅占用很大的内存,如果仅仅只需要访问某几个元素,那其他绝大多数元素占用的空间就白白浪费了。

所以,如果列表中的元素可以按照某种算法推算出来,那如果可以在循环的过程中不断推算出后续的元素,就可以不用创建完整的列表,从而节省大量的空间。

在 python 中,这种一边循环一边计算的机制,称为生成器(generator)

要创建一个 generator ,很多种方法。

3.1、生成器表达式

最简单的方式是把列表生成式的 [] 改成 () ,就创建了一个 generator

In [16]: g = (i**2 for i in range(10))

In [17]: g
Out[17]: <generator object <genexpr> at 0x00000225A239A510>

In [18]: next(g)
Out[18]: 0

In [19]: next(g)
Out[19]: 1

生成器也是迭代器,当然也可以通过 for 循环进行迭代。

In [20]: for item in (g):
    ...:     print(item)
    ...:
4
9
16
25
36
49
64
81
3.2、生成器函数

如果推算的算法比较复杂,用生成器表达式无法实现的时候,还可以通过函数来 实现。

比如,斐波拉契数列,除第一个和第二数外,任意一个数都等于前两个数的和:

0,1,1,2,3,5,8,...

def fib(n):
    a, b = 0, 1
    for _ in range(n):
      print(a)
      a,b = b, a+b
fib(10)
0
1
1
2
3
5
8
13
21
34

但是函数 fib 虽然包含了推算斐波拉契数列的算法规则,但是却是一次性算出了所有的值,和 generator 的逻辑很像。要将 fib 函数变成 generator ,只需要将 print(a) 改成 yield a 就可以了:

In [24]: def fib(n):
    ...:     a, b = 0, 1
    ...:     for _ in range(n):
    ...:         yield a
    ...:         a,b = b, a+b
    ...: g = fib(10)
    ...: g
Out[24]: <generator object fib at 0x00000225A3D4E9E0>

In [25]: next(g)
Out[25]: 0

In [26]: next(g)
Out[26]: 1

In [27]: for item in g:
    ...:     print(item)
    ...:
1
2
3
5
8
13
21
34

这就是定义 generator 的另一种方法。如果一个函数的定义中使用了 yield 关键字,那么这个函数就不再是一个普通的函数,而是一个生成器这时候调用函数返回的就是一个生成器对象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 必pass,这几个问题搞不明白,建议还是不要去面试了! 的相关文章

  • 如何在Python中选择要写入(.csv)的列

    import csv f csv reader open lmt csv r open input file for reading Date Open Hihh mLow Close Volume zip f s plit it into
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • Tipfy:如何在模板中显示blob?

    鉴于在 gae 上使用tipfy http www tipfy org python 以下模型 greeting avatar db Blob avatar 显示 blob 此处为图像 的模板标签是什么 在这种情况下 斑点是一个图像 这很棒
  • Python 的 mysqldb 晦涩文档

    Python 模块 mysqldb 中有许多转义函数 我不理解它们的文档 而且我努力查找它们也没有发现任何结果 gt gt gt print mysql escape doc escape obj dict escape any speci
  • 张量流和线程

    下面是来自 Tensorflow 网站的简单 mnist 教程 即单层 softmax 我尝试通过多线程训练步骤对其进行扩展 from tensorflow examples tutorials mnist import input dat
  • Python——捕获异常的效率[重复]

    这个问题在这里已经有答案了 可能的重复 Python 常见问题解答 异常有多快 https stackoverflow com questions 8107695 python faq how fast are exceptions 我记得
  • 按多个键分组并对字典列表的值进行汇总/平均值

    在Python中按多个键进行分组并对字典列表进行汇总 平均值的最Pythonic方法是什么 假设我有一个字典列表 如下所示 input dept 001 sku foo transId uniqueId1 qty 100 dept 001
  • 如何使用 PyMongo 在重复键错误后继续插入

    如果我需要在 MongoDB 中插入尚不存在的文档 db stock update one document set document upsert True 将完成这项工作 如果我错了 请随时纠正我 但是 如果我有一个文档列表并想将它们全
  • 返回上个月的日期时间对象

    如果 timedelta 在它的构造函数中有一个月份参数就好了 那么最简单的方法是什么 EDIT 正如下面指出的那样 我并没有认真考虑这一点 我真正想要的是上个月的任何一天 因为最终我只会获取年份和月份 因此 给定一个日期时间对象 返回的最
  • 如何将类添加到 LinkML 中的 SchemaDefinition?

    中的图表https linkml io linkml model docs SchemaDefinition https linkml io linkml model docs SchemaDefinition and https link
  • Python 3在for循环中更改字典键的值不起作用

    我的 python 3 代码没有按预期工作 def addFunc x y print x y def subABC x y z print x y z def doublePower base exp print 2 base exp d
  • pandas 中连续数据的平行坐标图

    pandas 的 parallel coordinates 函数非常有用 import pandas import matplotlib pyplot as plt from pandas tools plotting import par
  • PyArmor - 打包为一个可执行文件

    当我执行此命令时 您好 使用 PyArmor pyarmor pack main py 它将它打包到一个名为的文件夹中dist里面包含我的 exe 以及许多 Python 扩展文件 据我所知 PyArmor 使用 PyInstaller 来
  • 如何正确导入主代码和模块中同时使用的模块?

    假设我有一个主脚本 main py 它导入另一个 python 文件import coolfunctions另一个 import chores 现在 假设 Coolfunctions 也使用家务活中的东西 因此我声明import chore
  • 在seaborn中对箱线图x轴进行排序

    我的数据框round data看起来像这样 error username task path 0 0 02 n49vq14uhvy93i5uw33tf7s1ei07vngozrzlsr6q6cnh8w 39 png 1 0 10 n49vq
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 如何使用 os.chdir 转到减去最后一步的路径?

    例如 一个方法传递了一个路径作为参数 这个路径可能是 C a b c d 如果我想使用 os chdir 更改为 C a b 怎么办 c 没有最后一个文件夹 os chdir 可以接受 命令吗 os chdir 可以采取 作为论点 是的 然
  • 沿轴 0 重复 scipy csr 稀疏矩阵

    我想重复 scipy csr 稀疏矩阵的行 但是当我尝试调用 numpy 的重复方法时 它只是将稀疏矩阵视为对象 并且只会将其作为 ndarray 中的对象重复 我浏览了文档 但找不到任何实用程序来重复 scipy csr 稀疏矩阵的行 我
  • 如何使用 Python 3 正确显示倒计时日期

    我正在尝试获取将显示的倒计时 基本上就像一个世界末日时钟哈哈 有人可以帮忙吗 import os import sys import time import datetime def timer endTime datetime datet
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code

随机推荐

  • 网络安全中的POC、EXP、Payload、ShellCode_网络安全payload是什么意思

    什么是 POC EXP Payload POC 概念证明 即概念验证 英语 Proof of concept 简称POC 是对某些想法的一个较短而不完整的实现 以证明其可行性 示范其原理 其目的是为了验证一些概念或理论 在计算机安全术语中
  • Vue2 即将结束支持!!!

    Vue2 Vue 2 0 发布于 2016 年 已经有超过 7 年的历史 它是 Vue 框架成为主流的重要里程碑 许多当前的 Vue 用户都是在 Vue 2 时期就开始使用 Vue 的 并且有许多出色的项目是基于 Vue 2 构建的 Vue
  • 详解Python字典、集合和深浅拷贝

    什么是字典 字典 Python内置的数据结构之一 与列表一样是一个可变序列 以键值对的方式存储数据 字典是一个无序的序列 字典的实现原理与查字典类似 查字典是先根据部首或拼音查找汉字对应的页码 Python中的字典是根据key查找value
  • 利用文件夹选项解决实际问题的系统小技巧

    利用文件夹选项解决实际问题的系统小技巧 在Windows操作系统中 文件夹选项是一个非常实用的功能 可以帮助我们解决许多实际问题 下面 我们将介绍一些利用文件夹选项解决实际问题的系统小技巧 1 隐藏文件夹 有时候 我们可能需要隐藏一些文件夹
  • 音频flac免费转换软件怎么使用?快来看看这个实用指南

    你是否遇到过需要将多个音频文件的格式转换为另一种格式的情况 那你可能需要一款音频格式转换软件来帮你完成这个任务 音频转换器是一种非常实用的工具 它们能够为我们提供高效且优质的音频格式转换体验 屏幕前的你 如果还在深受音频批量转换flac问题
  • 用python画一个爱心的代码,用python画爱心代码

    这篇文章主要介绍了用python画一个心形怎么编程 具有一定借鉴价值 需要的朋友可以参考下 希望大家阅读完这篇文章后大有收获 下面让小编带着大家一起了解一下 如何使用python中的turtle库 画出最完美的一个爱心 这里本文介绍两种方法
  • 构建智慧储能物联网,4G工业路由器远程监测在线管理

    物联网技术的发展为智慧储能管理带来了革命性的变化 其中 4G工业路由器IR5000通过丰富的连接能力如串口RS485 232或网口的方式 实现了与储能现场各设备的连接 包括电表 电能检测器 防孤岛装置 BMS电池管理系统 监控服务器 储能控
  • 电商API接口接入|电商系统中的商品功能就该这么设计,稳的一批!

    商品功能作为电商系统的核心功能 它的设计可谓是非常重要的 就算不是电商系统中 只要是涉及到需要交易物品的项目 商品功能都具有很好的参考价值 今天就以mall项目中的商品功能为例 来聊聊商品功能的设计与实现 mall项目简介 这里还是简单介绍
  • Windows7系统odbcad32.exe文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个odbcad3
  • 软件测试/测试开发/人工智能/测试管理圆桌讨论会 | 解锁测试管理的核心问题,提升您的管理实力!

    人工智能的出现 对我们的测试行业有哪些明显的影响呢 我们又应该如何应对 如何更好地拥抱人工智能呢 如何打造积极向上 主动 执行力强 不推诿 不甩锅 服从安排 和谐 互帮互助的团队 如何有效的追踪团队的测试效率 后续对测试时间 质量等评估做支
  • 直播预约丨《实时湖仓实践五讲》第五讲:实时湖仓领域的最佳实践解析

    如今 大规模 高时效 智能化数据处理已是 刚需 企业需要更强大的数据平台 来应对数据查询 数据处理 数据挖掘 数据展示以及多种计算模型并行的挑战 湖仓一体方案应运而生 实时湖仓实践五讲 是袋鼠云打造的系列直播活动 将围绕实时湖仓的建设趋势和
  • 爱心代码编程python可复制,怎么用python编写图案

    大家好 小编来为大家解答以下问题 简单的python代码编程图形 爱心代码编程python可复制 今天让我们一起来看看吧 Python自带一套简单的图形开发工具 Turtle 小乌龟 用来画一些简单的二维图形 通过写代码来画画 import
  • Windows7系统nslookup.exe文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个nslooku
  • Windows7系统openfiles.exe文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个openfil
  • Windows7系统ntkrnlpa.exe文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个ntkrnlp
  • IP地址定位技术能做什么?

    随着互联网的普及和技术的不断进步 人们对于网络的需求越来越高 在这个过程中 IP地址定位技术逐渐崭露头角 成为了一个备受关注的话题 那么 IP地址定位技术究竟能做什么呢 一 确定地理位置 IP地址定位技术最基本的功能就是确定地理位置 通过查
  • Windows7系统PATHPING.EXE文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个PATHPIN
  • 执行tsc -v命令后报错‘tsc‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。怎样解决?

    分析 tsc v 这个命令主要是查看typescript编译器的版本号的 也可以用于检查typescript是否安装好了 是否正常 1 如果没有安装的话 就去安装 可以使用 npm ls typescript 查看本地是否安装typescr
  • 鸿蒙开发 - Number和number、String和string等的区别

    我们知道鸿蒙开发使用的语言时 ArkTS 而 ArkTS 是 TypeScript 的超集 TypeScript 又是 JavaScript 的超集 所以对于基本数据类型使用的是 TypeScript 语法 在 TypeScript 中 N
  • python 必pass,这几个问题搞不明白,建议还是不要去面试了!

    1 可迭代对象 在 python 中我们可以通过 for 循环来遍历列表 元组 这种遍历我们称为迭代 Iteration 在 python 中凡是可以通过 for in 进行迭代的对象 它就是可迭代对象 1 1 如何判断一个对象是可迭代对象