用户:
TimeLinkForever查看:9 回复:2 评论:9 创建时间:2020-01-16T14:58:27
这是雪地游戏工作室时之笛林克倾情奉献的教程贴:风之杖系列
接下来废话不多说,进入正题:Python中的with as关键字
首先来看看他们的语法!
with expression as target:
code
第一次看到是不是跟我一样:
明明每个字母都认识,连起来就看不懂啦?????
解释一下其实还是能懂的
with
#把
expression
#表达式
as
#塞进
target
#一个临时变量
code
#代码
with expression as target:
code
#连起来:把一个表达式的值塞进一个临时变量,并运行下面与这个临时变量有关的代码
现在你可能就对这个关键字有了一些了解。
但是它对编程有什么帮助呢?
说白了,这就是个整理工具。
来看下面两组代码:
#普通方法
myfile=open("冰天s火鸣.py","r")
myfile=myfile.readlines()
return myfile
#with as 方法
with open("冰天s火鸣.py","r") as myfile:
myfile=myfile.readlines()
return myfile
(以上代码在我的电脑上可以运行,但是要注意:
1.第一种代码运行后要close()掉,不然在其他平台同时打开就会有问题
2.open如果出问题,试着把"r"改成encoding="utf-8")
可以看见,如果后续没有继续用到冰天s火鸣.py这份文件的话,with as
的代码就比普通的方法少些。
而且还有很重要的一点:
我们整理代码,最重要的是啥?
简洁明了,一看就懂!
所以我们使用with as能让代码更加的有条理,能让你清楚的从第一行就看出这块代码都调用了些什么。
你以为就这些了吗?
NONONO!
你是没见过这种神奇的东西
辣就是:
代替踹(Try)和Except
接下来讨论一个类把。
with as这玩意儿有2个类方法:
__enter__,__exit__
之前叫code的中间部分其实叫with_block
做好心理准备,接下来的内容是重中之重






我们创建一个codemao类:
class Codemao(object):
def __enter__(self):
return self
def __exit__(self,type,value,trace)
print("编程猫错了")
print(type,value,trace)
def code(self):
print(1/0)
with Codemao() as catcage:
catcage.code()
只见它在经过__exit__的运行后,开始惨不忍睹的报错。

看下面的代码
#上面的类懒得写,不写了,去掉__enter__和__exit__就可以啦
catcage=Codemao()
try:
catcage.code()
except ZeroDivisionError:
print("ZeroDivisionError")
虽然不会报错,但这个简单的程序,try比with好,但是大型的调试该怎么办呢?with能返回更多的信息供我们调试,但try不太行。所以,with更好。还有上面使用类与with结合的方法,也很好用讷。
总结:
with as 的运行过程与语法
#语法:
with expression as target:
with_block
#运行过程:
try:
__enter__()
with_block
finally:
__exit__()
with as的作用讲完了,大家都懂了把?
小测试
使用with as运行并返回以下类的错误参数type,value,trace
回复中五个人完成小测试我林克就更教程哈哈哈哈哈哈哈哈哈
记得点赞哟

TimeLinkForever”以下类“的代码:
#???是需要填入的地方
class Codecat(object):
def __enter__(???):
???
def __exit__(???):
???
def hey(self):
print("hey"+5)
???点赞0
评论