栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

没有“ as”关键字的“ with”语句的含义

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

没有“ as”关键字的“ with”语句的含义

上下文管理器可以 选择
返回一个对象,该对象将分配给命名的标识符

as
。而且,由
__enter__
分配的方法返回的对象
as
不一定是上下文管理器本身。

as <identifier>
在创建
对象时(如
open()
调用一样)使用帮助,但并非仅为上下文创建所有上下文管理器。例如,它们可以重用并且已经创建。

建立 数据库连接
。您只需创建一次数据库连接,但是许多数据库适配器使您可以将该连接用作上下文管理器。输入上下文并开始事务,然后退出并提交事务(成功)或回滚(发生异常时):

with db_connection:    # do something to the database

此处无需创建新对象,使用可以输入上下文,

db_connection.__enter__()
然后使用可以再次退出上下文
db_connection.__exit__()
,但是我们已经
有了 对连接对象的引用。

现在, 可能 是输入时连接对象产生了一个游标对象。现在,可以使用本地名称分配该光标对象了:

with db_connection as cursor:    # use cursor to make changes to the database

db_connection
在这里仍然没有被调用,它已经存在过,我们已经对其进行了引用。但是,
db_connection.__enter__()
现在将所产生的任何东西分配给他们,
cursor
然后就可以使用了。

文件对象就是这种情况。

open()
返回文件对象,然后
fileobject.__enter__()
返回文件对象 本身
,因此您可以
open()
with
语句中使用调用, 在一个步骤(而不是两个步骤)中为新创建的对象分配引用。没有这个小把戏,您将不得不使用:

f = open('myfile.txt')with f:    # use `f` in the block

将所有这些都应用于您的着色器示例;您已经有参考

self.shader
。很可能再次
self.shader.__enter__()
返回对的引用
self.shader
,但是由于您已经有了一个可以正常使用的引用,为什么要为此创建一个新的本地?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号