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

流畅的 Python 第二版(GPT 重译)(九)

在这种用法中,第一个参数必须是一个可调用对象,以便重复调用(不带参数)以产生值,第二个参数是一个sentinel:一个标记值,当可调用对象返回该值时,迭代器会引发StopIteration而不是产生该标记值...可迭代对象与迭代器 从“为什么序列是可迭代的:iter 函数”中的解释,我们可以推断出一个定义: 可迭代的 任何iter内置函数可以获取迭代器的对象。...② 从s3获取一个迭代器。 ③ next(it) 获取下一个单词。 ④ 没有更多的单词了,所以迭代器会引发StopIteration异常。...这个输出只会在生成器函数内部的print调用输出之后出现。 ⑥ 文本start来自生成器体中的print('start')。...由于生成器体中的第三个print,输出中出现了end.。 ⑪ 当生成器函数运行到末尾时,生成器对象会引发StopIteration异常。for循环机制捕获该异常,循环干净地终止。

25010

一篇文章带你弄懂Python异常简介和案例分析

大家好,我是Go进阶者,今天给大家分享一些Python基础 (异常),一起来看看吧~ 一、异常简介 当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常...想一想: 上例程序,已经使用except来捕获异常了,为什么还会看到错误的信息提示?...答: except捕获的错误类型是IOError,而此时程序产生的异常为 NameError ,所以except没有生效。...文件不存在,那么会产生 IOError 异常 print('-----test--2---') print(num)# 如果num变量没有定义,那么会产生 NameError 异常 except...3>获取异常的信息描述 try: open("a.txt") except(NameError,IOError) as result: print("捕抓到异常") print

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

    python简单面试题

    对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。 二、垃圾回收 1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。...为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。 三、内存池机制 Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。...另外,在Python3中上面的代码的输出有何不同(假设代码中的print语句都转化成了Python3中的语法结构)?...所以,5/2 结果是2,而5./2结果是2.5 注意你可以通过下面的import语句来覆盖Python2中的这一行为 from future import division 还要注意“双斜杠”(//)...,这就是为什么第三个print语句的输出为3 2 3 下面代码的输出是什么?

    95020

    python生成器和迭代器

    简单来说,就好比一个盒子,我们可以往里面存放数据,也可以从里面一个一个地取出数据。  在python中,属于容器类型地有:list,dict,set,str,tuple.....。...Python有两种不同的方式提供生成器:          1.生成器函数(函数内部有yield关键字):常规函数定义,但是,使用yield语句而不是return语句返回结果。...yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行          2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表...  既然生成器就是迭代器,那么我们是不是也可以通过for循环来遍历出生成器中的内容呢?...Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。这也是生成器的主要好处。

    46330

    连Python产生器(Generator)的原理都解释不了,还敢说Python用了5年?

    其实,只有一点点区别,就是在创建data_generator对象时使用了一对圆括号,而不是一对方括号。...而for...in...循环中的in子句后面则是这个产生器对象,而n则是产生器中的每一个值(偶数)。...连续调用6次__next__方法,返回0到10,一共6个偶数,当第7次调用__next__方法时,产生器中已经没有值了,所以会抛出StopIteration异常。...由于for...in...语句自动处理了StopIteration异常,所以循环就会自动停止,但当直接调用__next__方法时,如果产生器中没有值了,就会直接抛出StopIteration异常,除非使用...所以从generate_even1函数的改造过程来看,yield的作用就相当于使用append方法将表达式的值添加到列表中,只不过yield并不会保存表达式的值,而append方法会保存表达式的值。

    46920

    Python全网最全基础课程笔记(一)——基础入门

    以至于为什么要写的这么详细:自己也是学过Python的,很多新手只是简单的过一篇语法,其实对于一个知识点的底层逻辑和其他使用方法以及参数详情根本不是很了解,这就导致学完很容易忘记,而且在实战过程中也是半知半解...异常处理 Python提供了异常处理机制,允许程序在遇到错误时执行特定的代码块,而不是直接崩溃。try-except语句用于捕获和处理异常。...虽然大多数Python解释器和编辑器都能识别这种变体,但根据PEP 263(定义Python源文件编码的规范),推荐使用冒号(:)而不是等号(=)来分隔“coding”和编码名称。...然而,这并不是Python官方推荐的做法,也不是Python语法的一部分。如果你的代码只会在Python解释器中运行,并且不使用Emacs作为编辑器,那么你没有必要使用这种形式的编码声明。...如果你尝试这样做,Python解释器会抛出一个SyntaxError异常,指出该标识符是保留字。

    18500

    python基础题目大全,测试你的水平,巩固知识(含答案)

    ,但都能正常运行Python代码,以下是常用的五种Python解释器: CPython:当 从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解 释器:Cpython,...在Python的解释器中,使用广泛的是CPython,对于Python的编译,除了可以采用以上解释器 进行编译外,技术高超的开发者还可以按照自己的需求自行编写Python解释器来执行Python代码,...一般计算机默认的最大递归深度在1000左右,python最大递归深度一般在4000左右,跟计算 机的性能有关系,这个数不是一个定数,可通过一下方式测试 import sys print(sys.getrecursionlimit...静态方法:是既不是用类中的属性又不使用对象中的属性,由类或者对象调用的方法,依赖python装饰器@staticmethod来实现 类方法:只使用类中的静态变量,一般都是由类调用,依赖python装饰器...为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。 三、内存池机制 Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

    92920

    Python 语法基础

    # 负数索引从 -1 开始 Python 字符串不能修改,是 immutable 的: a = "abcd" # a[0] = "d" 报错 值得注意的是,由于 Python 中的字符串是不可改变的,...import copy a = [1, 2, 3] b = [4, 5, 6] c = [a, b] # c 中包含 a, b 两个子对象 d = c print("a: ", id(a)) print...包含内置名称的命名空间是在 Python 解释器启动时创建的,永远不会被删除。模块的全局命名空间在模块定义被读入时创建;通常,模块命名空间也会持续到解释器退出。...事实上,所有引入新名称的操作都是使用局部作用域:特别地,import 语句和函数定义会在局部作用域中绑定模块或函数名称。...__init__(self) x = Son() print(x.i) print(x.j) 在一般情况下,搜索从父类所继承属性的操作是深度优先、从左至右的,当层次结构中存在重叠时不会在同一个类中搜索两次

    61140

    Python 协程的详细用法和例子

    协程可能会从调用方接收数据,不过调用方把数据提供给协程使用的是 .send(datum) 方法,而不是next(…) 函数。 ==yield 关键字甚至还可以不接收或传出数据。...GEN_RUNNING:解释器正在执行 3. GEN_SUSPENED:在yield表达式处暂停 4....显式地把异常发给协程 从 Python 2.5 开始,客户代码可以在生成器对象上调用两个方法,显式地把异常发给协程。...子生成器:从 yield from 中 部分获取的生成器。 图示 ? 解释: 1. 委派生成器在 yield from 表达式处暂停时,调用方可以直接把数据发给子生成器。 2....3. 子生成器返回之后,解释器会抛出 StopIteration 异常,并把返回值附加到异常对象上,此时委派生成器会恢复。

    1.2K10

    Python程序员最常犯的10个错误,你中招了吗?

    为什么每次调用foo()后会不断把"baz"添加到已有的列表,而不是新建一个新列表呢?答案就是,函数参数的默认值仅在定义函数时执行一次。...举个例子,在导入模块A的时候,假如该模块A试图导入Python标准库中的模块B,但你已经定义了一个同名模块B,模块A会错误导入你自定义的模块B,而不是Python标准库中的模块B。...原来,在Python 3中,在except代码块作用域外无法访问异常对象。(原因是,Python 3会将内存堆栈中的循环引用进行保留,直到垃圾回收器运行后在内存中对其进行清理。)...为什么呢?因为当Python解释器关闭时,该模块的全局变量的值都会被置为None。因此,在上述示例中,在调用__del__函数时,foo的值已经为None。...在调用atexit.register()函数后,当你的代码运行结束后(即正常退出程序的情况下),注册处理程序会在解释器关闭之前运行。

    1K10

    Python程序员最常犯的十个错误

    为什么每次调用foo()函数时,都会把"baz"这个默认值添加到已有的列表中,而不是重新创建一个新的空列表呢? 答案就是,可选参数默认值的设置在Python中只会被执行一次,也就是定义该函数的时候。...因此,在上面的代码中,由于类C中并没有x这个属性,解释器将会查找它的基类(base class,尽管Python支持多重继承,但是在这个例子中,C的基类只有A)。...(这么设计的原因在于,如果不这样的话,堆栈帧中就会一直保留它的引用循环,直到垃圾回收器运行,将引用从内存中清除。)...为什么?因为当解释器结束运行的时候,该模块的全局变量都会被设置为None。因此,在上述示例中,当__del__方法被调用之前,foo已经被设置成了None。...这样的话,当你的程序执行完成之后(即正常退出程序的情况下),你所指定的处理程序就会在解释器关闭之前运行。

    97670

    Python 自动化指南(繁琐工作自动化)第二版:十一、调试

    这比全速运行程序要慢得多,但它有助于在程序运行时看到程序中的实际值,而不是从源代码中推断出可能的值。 引发异常 每当 Python 试图执行无效代码时,都会引发异常。...在第 3 章的中,你读到了如何用try和except语句处理 Python 的异常,这样你的程序就可以从你预期的异常中恢复。但是您也可以在代码中引发自己的异常。...使用try和except语句,您可以更优雅地处理错误,而不是让整个程序崩溃。 获取字符串形式的回溯 当 Python 遇到错误时,它会产生一个称为回溯的错误信息宝库。...您应该使用“跳过”而不是“进入”,因为您不想单步执行print()函数的代码。(虽然 Mu 要阻止调试器进入 Python 的内置函数。)...在调试检查器窗格中,您应该看到first、second和third变量被设置为字符串值'5'、'3'和'42',而不是整数值5、3和42。

    1.5K40

    18 个坏习惯,你一定要抛弃

    else: print(f"Lol {name} that's not many subs") 2、使用 finaly 而不是上下文管理器 坏的做法: def finally_instead_of_context_manager...\n") f.close() 好的做法是使用上下文管理器,即使发生异常,也会自动关闭文件,凡是有上下文管理器的,都应该首先采用: def manually_calling_close_on_a_file...(end - start) 15、记录日志使用 print 而不是 logging 坏的做法 def print_vs_logging(): print("debug info") print...subprocess.run(["ls -l"], capture_output=True, shell=True) 如果 shell=True,则将 ls -l 传递给/bin/sh(shell) 而不是...Unix 上的 ls 程序,会导致 subprocess 产生一个中间 shell 进程, 换句话说,使用中间 shell 意味着在命令运行之前,命令字符串中的变量、glob 模式和其他特殊的 shell

    28530

    python 字符编码处理总结

    下面以汉字'哈'来解释作示例解释所有的问题,汉字“哈”的各种编码如下: 1 UNICODE(UTF8-16): 0xC854 2 UTF-8: 0xE59388 3 GBK: 0xB9FE 除此之外还有如...在python中str和unicode在编码和解码过程中,如果将一个str直接编码成另一种编码,会先把str解码成unicode,采用默认编码,一般默认编码是anscii,所以在上面示例代码中第一次转换的时候会出错...因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量: # coding=gbk import codecs data = open("Test.txt")....,但是遇到了非法字符,比如产生字符串的来源发生错误,引入了错误值等,这时再次遇到异常 例如:全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57, 这些字符,看起来都是全角空格...,但它们并不是“合法”的全角空格 真正的全角空格是\xa1\xa1,因此在转码的过程中出现了异常。

    61110

    gevent 迁移 Python 3

    将来时 在 Python 3 中,print 变成了一个函数,这直接意味着这样的代码是语法错误的: print "Hello, world!"...对于 print 来说,Python 3 风格的 print() 函数自 Python 2.6 起开始出现在 __future__ 中。...谢天谢地,gevent 及时摒弃了 Python 2.5 的支持,我们可以统一使用 Python 3 风格的 print() 来写所有代码,而做到这一点只需要在所有用到 print 的 Python 文件开头写这么一句...defined 原来,Python 3 去掉了 sys.exc_clear() 函数,把该行为嵌入了语言内部——也就是说,只要是出了 except 子句,Python 3 的解释器会自动清除异常状态,还会捎带手把异常变量引用...Python 3 是这么实现这种异常链的: 当第一个异常对象产生时,traceback 信息会保存在该对象的 __traceback__ 属性中; 当第二个异常对象产生时,因为是在第一个异常的 except

    54710

    Python异常

    异常是一个事件,该事件会在程序执行过程中发生,将影响程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。...当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 异常处理   Python中捕捉异常可以使用try/except语句。...python的标准异常类有如下列表: BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行 Exception 常规错误的基类...(index) KeyError 映射中没有这个键 MemoryError 内存溢出错误(对于Python 解释器不是致命的) NameError 未声明/初始化对象 (没有属性) UnboundLocalError...successful' finally:    print 'Program end'     运行结果: Write content successful Program end   上面程序中

    88310

    Python基础13-模块的使用

    (注:文件夹下有一个__init__.py文件,该文件夹称之为包) 4.使用C编写并链接到python解释器的内置模块 ---- 为什么要使用模块?...,这种拿来主义,可以极大地提升我们的开发效率 #ps: 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python...spam import read1 as r1 r1() 模块的循环导入 模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码...(当前执行文件的名称空间对应的内存),如果有则直接引用 ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看 2、如果没有,解释器则会查找同名的内建模块...官网解释 搜索路径: 当一个命名为spam的模块被导入时 解释器首先会从内建模块中寻找该名字 找不到,则去sys.path中找该名字 sys.path从以下位置初始化 1 执行文件所在的当前目录

    38230

    Python GIL(Global Interpreter Lock)全局解释器锁

    Python GIL(Global Interpreter Lock)全局解释器锁 在CPython中,全局解释器锁(或GIL)是一个互斥锁,可以防止多个本机线程同时执行Python字节码。...这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL ----  Python threading(线程)模块 直接调用: 1 import threading 2...*注:我用的Python3,不知为什么,结果总是正确的,网上搜了搜,说可能是自动加了锁:以后可能会用Python2版本,也标注一下 1 1 2 2 3 3 4 4 5 5 6 6 7 7...加入GIL主要的原因是为了降低程序的开发的复杂度,比如现在的你写python不需要关心内存回收的问题,因为Python解释器帮你自动定期进行内存回收,你可以理解为python解释器里有一个独立的线程,每过一段时间它起...wake up做一次全局轮询看看哪些内存数据是可以被清空的,此时你自己的程序 里的线程和 py解释器自己的线程是并发运行的,假设你的线程删除了一个变量,py解释器的垃圾回收线程在清空这个变量的过程中的clearing

    2K70

    一文入门Python 3

    基础语法 运行 Python 交互式解释器 在命令行窗口执行python后,进入 Python 的交互式解释器。exit() 或 Ctrl + D 组合键退出交互式解释器。...空行与代码缩进不同,空行并不是 Python 语法的一部分。书写时不插入空行,Python 解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。...另一种方法是使用撰写 Python 解释器本身的本地语言来编写模块。...模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 Python 标准库的方法。 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。...处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。 一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

    1.2K20
    领券