首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你能发现这段 Python 代码中的 bug 吗?

在深入探讨之前,让我先来介绍一下背景故事。我的任务是分析文本文件中的一些以逗号分隔的数据,如下所示:这个文本文件包含若干宽度可变的十六进制值,每行至少三个字段。我只关心第一个和第三字个段。...在我看来,分析工作可分为三步:循环读取每一行数据;利用逗号将数据分解成一个列表;选取第一个和第三个元素,并将它们转换为整数。...下图展示了正确的生成器表达式与我编写的代码之间的差异:你看出问题所在了吗?代码中的问题在于,在分解文本之前,.split() 的返回值是迭代器。...我不确定,但我相信这关系到最初提出列表推导式的建议时确立的实现细节。最后,我在 CPython 的贡献者 Crowthebird 的帮助下解决了这个问题,他演示了在不使用推导式的情况下重写代码的问题。...我不认为按照我的理解修改语言会更好,因为如此很难区分在嵌套的情况下容器何时应该解构,何时应该重用,此外列表推导式会返回元组,而 PEP 202 规定不允许。

20620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你能发现这段 Python 代码中的 bug 吗?

    在深入探讨之前,让我先来介绍一下背景故事。我的任务是分析文本文件中的一些以逗号分隔的数据,如下所示: 这个文本文件包含若干宽度可变的十六进制值,每行至少三个字段。我只关心第一个和第三字个段。...在我看来,分析工作可分为三步: 循环读取每一行数据; 利用逗号将数据分解成一个列表; 选取第一个和第三个元素,并将它们转换为整数。...下图展示了正确的生成器表达式与我编写的代码之间的差异: 你看出问题所在了吗?代码中的问题在于,在分解文本之前,.split() 的返回值是迭代器。...最后,我在 CPython 的贡献者 Crowthebird 的帮助下解决了这个问题,他演示了在不使用推导式的情况下重写代码的问题。 错误的写法: 正确的写法: 这个问题可以得到解决吗?...我不认为按照我的理解修改语言会更好,因为如此很难区分在嵌套的情况下容器何时应该解构,何时应该重用,此外列表推导式会返回元组,而 PEP 202 规定不允许。

    13630

    python程序的分支结构(专题)

    无论你是初学者还是经验丰富的开发者,理解和灵活运用分支结构是提高代码可读性和功能性的关键一步。我们将深入研究条件语句、循环结构和异常处理,为你呈现一个全面的分支结构指南。...: 实例: 在处理文件时,根据文件类型执行不同的操作,例如读取文本文件或解析JSON文件。...: 嵌套过多的条件语句可能导致代码难以阅读,也可能对性能产生一定影响。...过深的嵌套可能使得代码更难优化和维护。 尽量避免过深的嵌套,考虑将复杂的逻辑分解成函数或者通过其他结构化方式组织。 使用逻辑运算符(如and、or、not)合理组合条件,以避免多层嵌套。...无论是简单的条件语句,还是复杂的循环结构,每一行代码都是一次选择,每一个分支都是一次决策。通过理解和运用这些分支结构,我们能够使程序在不同的情境下表现出多样性和强大的适应性。

    31710

    Kotlin入门(27)文件读写操作

    比如把一段文本写入文本文件,只消调用File对象的writeText方法,即可实现写入文本的功能。...这几个方法理解起来毫不费力,从文件中读取全部的文本,也只要下面一行代码便成:     //读取文件的文本内容     val content = File(file_path).readText() 若想从图片文件中读取位图信息...(fis)     fis.close() 前两种读取图片文件的方式,其实都包含两个步骤:先从File对象获得文件内容,再利用位图工厂解码成位图。...开发者的口味各不相同,不管个人的偏好写法是啥,以上三种方式总有一款适合你。 写文件和读文件是处理单个文件,没有太复杂的需求。...== "txt" } //选择扩展名为txt的文本文件             .forEach { fileNames.add(it.name) } //循环处理符合条件的文件 注意到以上代码判断文件扩展名使用了

    3.4K20

    读会搜索引擎

    索引管理器,顾名思义是管理带有索引结构的数据,负责对索引的访问。那么索引是怎么管理的呢?...不可能总是放在内存里,索引通常来讲是作为二级存储的二进制文件,二级存储可以理解为 硬盘之类的,二进制文件是除了文本文件以外的文件(文本文件是指由ascii码等方式显示的文件)。...索引检索器,是负责利用索引对全文进行搜索,输入是应用层传输过来的数据,和索引管理器一起协同查询文档,并以某种方式反馈给用户。 索引构建器,从文本中生成索引的组件。...通常而言,构建器会将文本解析成一个个单词序列,再将单词序列转换为索引结构。 文档管理器,存储着文档,负责取出与查询结果匹配的文档,如果有需要的话会选取一部分作为摘要。...只要根据ID的来检索数据库就好,至于自己用文件夹存储呢,还是用mysql之类的数据库可以自己考虑。 此外,还会有爬虫和搜索排序系统,最出名的当属pagerank。

    49110

    分支与循环

    逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。 • ! :逻辑取反运算符(改变单个表达式的真假)。...循环的嵌套 前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决问题,就是我们所说的:循环嵌套. goto 语句 C语⾔提供了⼀种⾮常特别的语法,...② rand:C语⾔提供了⼀个函数叫 rand,这函数是可以⽣成随机数的,函数原型如下所⽰: int rand (void); rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间...int seed); 程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了...那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随机数,这就⽭盾了。

    3000

    python中for循环语句例子_python怎么循环1到8不要4

    大家好,又见面了,我是你们的朋友全栈君。 这篇文章主要介绍了python中关于for循环使用过程中的碎碎念,需要的朋友可以参考下 为什么要挑战自己在代码里不写for loop?...首先,让我们退一步看看在写一个for循环背后的直觉是什么: 1.遍历一个序列提取出一些信息 2.从当前的序列中生成另外的序列 3.写for循环已经是我的第二天性了,因为我是一个程序员 幸运的是,Python...# 1 with …: for …: if …: try: except: else: 这个例子使用了多层嵌套的代码,这是非常难以阅读的。...如果你遵守只对管理逻辑使用缩进的规范,那么核心业务逻辑应该立刻脱离出来。 “扁平结构比嵌套结构更好” – 《Python之禅》 为了避免for循环,你可以使用这些工具 1....抽取函数或者表达式 上面的两种方法很好地处理了较为简单的逻辑,那更复杂的逻辑怎么办呢?作为一个程序员,我们会把困难的事情抽象成函数,这种方式也可以用在这里。

    1.2K20

    我是这样挑战不用 for 循环的

    学Python最简单的方法是什么?推荐阅读:Python开发工程师成长魔法 为什么要挑战自己在代码里不写for loop?因为这样可以迫使你去使用比较高级、地道的语法或库。...首先,让我们退一步看看在写一个for循环背后的直觉是什么: 遍历一个序列提取出一些信息 从当前的序列中生成另外的序列 写for循环已经是我的第二天性了,因为我是一个程序员 幸运的是,Python里面已经有很棒的工具帮你达到这些目标......: for ...: if ...: try: except: else: 这个例子使用了多层嵌套的代码,这是非常难以阅读的。...如果你遵守只对管理逻辑使用缩进的规范,那么核心业务逻辑应该立刻脱离出来。 “扁平结构比嵌套结构更好” – 《Python之禅》 为了避免for循环,你可以使用这些工具 1....抽取函数或者表达式 上面的两种方法很好地处理了较为简单的逻辑,那更复杂的逻辑怎么办呢?作为一个程序员,我们会把困难的事情抽象成函数,这种方式也可以用在这里。

    80780

    PHP 性能优化小技巧

    在多重嵌套循环中,如有可能,应当将最长的循环放在内层,最短循环放在 外层,从而减少 cpu 跨循环层的次数,优化程序性能。 4. 用单引号替代双引号引用字符串以实现 PHP 性能优化。 5....其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法(非静态方法)在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例再调用,静态速度很快,但是多了会占内存...特别不要在循环中使用@,在 5 次循环的测试中,即使是先用 error_reporting(0)关掉错误,在循环完成后再打开,都比用@快。...18 别在循环里用函数 例如: for($x=0; $x < count($array); $x++) { } 这种写法在每次循环的时候都会调用 count() 函数,效率大大降低, 建议这样: $len...= count($array); for($x=0; $x < $len; $x++) { } 让函数在循环外面一次获得循环次数。

    1.1K31

    学习go语言编程之工程管理

    在crc32中,就是该包的所有源代码。 也就是说,go工具会自动获取位于远程的包源码,在随后的编译中,也会在pkg目录中生成对应的.a文件。...工程构建 使用go build命令来执行构建,它会在你运行该命令的目录中生成工程的目标二进制文件,而不产生其他结果。...注意: 在构建可执行程序工程时,会在当前所在的目录中生成可执行程序,所以通常选择在项目目录下的bin目录中执行构建。...# 执行当前所在包的所有单元测试 go test 当然,也可以在IDE中对单个方法执行单元测试。...for循环,写这个for循环的原因是为了能够让测试运行足够长的时间便于进行平均运行时间的计算。

    21820

    python操作Excel学习笔记,以后储存数据 办公很轻松!

    ;接着我们获取单个单元格的值以及一个范围单元格的值。...在example4.xlsx文件中的“Sheet”工作表为空,我们现在往其中的单个单元格以及特定范围单元格写入内容。 写入前的“Sheet”工作表: ? 程序代码: ?....value = “值”的形式,两者效果等效,都是在C4单元格写入值,为了配合循环的使用,使用后一种更加方便。...实现思路为:逐行获取值,存为列表;最后将所有的行存成一个大的列表,这样“列表”[ i ][ j ]获得的就为第i行第j列的单元格的值;最后逐一取出列表的值,赋值给新列表第j行第i列的单元格。...第一个文本文件中的行将写入 列 A 中的单元格,第二个文本文件中的行将写入列 B 中的单元格,以此类推。 这里我准备了几份文本文件,我们将这些文件以单元格的形式写入Exel文件: ?

    4.4K10

    Google C++ 编程风格指南(二):作用域

    librarian { //以下别名在所有包含了该头文件的文件中生效。...嵌套类 当公有嵌套类作为接口的一部分时, 虽然可以直接将他们保持在全局作用域中, 但将嵌套类的声明置于 2.1. 名字空间 内是更好的选择....嵌套类可以在外围类中做前置声明, 然后在 .cc 文件中定义, 这样避免在外围类的声明中定义嵌套类, 因为嵌套类的定义通常只与实现相关. 缺点: 嵌套类只能在外围类的内部做前置声明....因此, 任何使用了 Foo::Bar* 指针的头文件不得不包含类 Foo 的整个声明. 结论: 不要将嵌套类定义成公有, 除非它们是接口的一部分, 比如, 嵌套类含有某些方法的一组选项. 2.3....局部变量在声明的同时进行显式值初始化,比起隐式初始化再赋值的两步过程要高效,同时也贯彻了计算机体系结构重要的概念「局部性(locality)」。 注意别在循环犯大量构造和析构的低级错误。

    79030

    一、HTML

    这种语言由一个个的标签组成,用这种语言制作的文件保存的是一个文本文件,文件的扩展名为html或者htm,一个html文件就是一个网页,html文件用编辑器打开显示的是文本,可以用文本的方式编辑它,如果用浏览器打开...-- 这是一段注释 --> html标签特点: html的标签大部分是成对出现的,少量是单个出现的,特定标签之间可以相互嵌套,嵌套就是指一个标签里面可以包含一个或多个其他的标签,包含的标签和父标签可以是同类型的...-- 单个出现的标签 --> 的嵌套 --> ...... html换行 代码中成段的文字,直接在代码中回车换行,在渲染成网页时候不认这种换行,如果真想换行,可以在代码的段落中插入来强制换行,代码如下: html字符实体 代码中成段的文字,如果文字间想空多个空格,在代码中空多个空格,在渲染成网页时只会显示一个空格,如果想显示多个空格,可以使用空格的字符实体,代码如下: <!

    4.5K40

    如何写出让同事无法维护的代码?

    要想无法维护 1、无注释,除了顺序注释以外,当时很少写注释 2、千层蛋糕for循环,if else多层嵌套,且无跳出逻辑 此代码一出,保证接手代码的人倒吸一口凉气。...一般情况下不需要更改idea单个文件初始化加载大小的,而当时写的那个工具类当个文件2.5M,总代码行数8000行+,单个方法if+for,400行+ 且在1万节点的解析上长达5分钟,没有SQL执行,单纯解析验证..., 在这里说下解析节点的逻辑 获取前台xml文件,解析成图片保存 每个节点解析成JSON数据并在数组内保存到响应库中 每个节点存在连接关系,需分析到对应连接,比如1-->2,是一种情况,2-->1...是一种情况,两种连接不能复用数据 每个节点内的数据需要校验,并不是普通的校验,除了非空的前后台校验,还要校验其有效性,这里的校验并不是说普通的是否电话号码有效,格式正确等,而是比如A节点的IP是否在B节点连接的...foreach效率要高于for(int ; ;),且预测当嵌套循环时不要超过三层,将循环次数小的放置外侧 4.java8 Lambada表达式 Map<String, Consumer<ReflectTest

    57610

    了解和学习基本Shell脚本和Linux文件系统疑难解答 - 第10部分

    基本Shell脚本 如前所述,shell脚本作为纯文本文件诞生。 因此,可以使用我们首选的文本编辑器创建和编辑。...循环 此循环允许为值列表中的每个值执行一个或多个命令。...done 哪里EVALUATION_COMMAND可以是任何命令(多个)可以与一个成功(0)或失败(0以外)状态退出,并且EXECUTE_COMMANDS可以是任何程序,脚本或shell结构,包括其它嵌套循环...1)for循环读取文件myservices.txt在时间列表的一个元素。 该单个元素由名为service的通用变量表示。...由于显而易见的原因,不可能在任何单个教程中涵盖这些主题的每一个方面,这就是为什么我们希望这些文章让你在正确的道路上自己尝试新的东西,并继续学习。

    73020

    使用SharpZipLib压缩打包多个内存中的文件

    ,zip.Add方法允许添加文件,但是不允许直接添加字符串或者byte[],但是我们做的是WebApplication,不希望是在Web服务器上把两个CSV文件生成后保存到硬盘上,然后调用上面的方法压缩硬盘上的文件...我们的文件应该都是在内存中生成,在内存中打包,然后直接把生成的zip文件的二进制流返回给用户,让用户下载。...MemoryStream(Encoding.Default.GetBytes(Str));         return s;     } } 实现了该接口后,那么我们压缩两个String成两个文本文件的包...zip.Add(d1, "Test1.txt");     zip.Add(d2, "Test2.txt");     zip.CommitUpdate(); } 上面的代码还是在硬盘上生成了...同样的方式,如果是在内存中生成了二进制文件,也可以使用实现IStaticDataSource接口的方式来打包。

    2.3K10
    领券