仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 523|回复: 12
打印 上一主题 下一主题

[其他Linux] Linux编程:Python中的高低文办理器仓酷云

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:19:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令。
这篇文章是关于甚么的?



  • 甚么是Python中的高低文办理器
  • 怎样利用高低文办理器
  • 怎样创立本人的高低文办理器
  • 关于Python高低文库(contextlib)
1.高低文办理器是甚么?

举个例子,你在写Python代码的时分常常将一系列操纵放在一个语句块中:
当某前提为真–实行这个语句块
当某前提为真–轮回实行这个语句块
偶然候我们必要在当程序在语句块中运转时坚持某种形态,而且在分开语句块后停止这类形态。
以是,现实上高低文办理器的义务是–代码块实行前筹办,代码块实行后拾掇。
高低文办理器是在Python2.5到场的功效,它可以让你的代码可读性更强而且毛病更少。接上去,让我们来看看该怎样利用。

2.怎样利用高低文办理器?

看代码是最好的进修体例,来看看我们一般是怎样翻开一个文件并写进”HelloWorld”?
1
2
3
4
5
6
filename=my_file.txt
mode=w#Modethatallowstowritetothefile
writer=open(filename,mode)
writer.write(Hello)
writer.write(World)
writer.close()

1-2行,我们指明文件名和翻开体例(写进)。
第3行,翻开文件,4-5行写进“Helloworld”,第6行封闭文件。
如许不就好了,为何还必要高低文办理器?可是我们疏忽了一个很小可是很主要的细节:假如我们没无机会抵达第6行封闭文件,那会如何?
举个例子,磁盘已满,因而我们在第4行实验写进文件时就会抛出非常,而第6行则基本没无机会实行。
固然,我们可使用try-finally语句块来举行包装:
1
2
3
4
5
6
writer=open(filename,mode)
try:
writer.write(Hello)
writer.write(World)
finally:
writer.close()

finally语句块中的代码不管try语句块中产生了甚么城市实行。因而能够包管文件必定会封闭。这么做有甚么成绩么?固然没有,但当我们举行一些比写进“Helloworld”更庞大的事变时,try-finally语句就会变得丑恶非常。比方我们要翻开两个文件,一个读一个写,两个文件之间举行拷贝操纵,那末经由过程with语句可以包管二者可以同时被封闭。
OK,让我们把事变分化一下:
起首,创立一个名为“writer”的文件变量。
然后,对writer实行一些操纵。
最初,封闭writer。
如许是否是文雅多了?
1
2
3
withopen(filename,mode)aswriter:
writer.write(Hello)
writer.write(World)

让我们深切一点,“with”是一个新关头词,而且老是陪伴着高低文办理器呈现。“open(filename,mode)”已经在之前的代码中呈现。“as”是另外一个关头词,它指代了从“open”函数前往的内容,而且把它赋值给了一个新的变量。“writer”是一个新的变量名。
2-3行,缩进开启一个新的代码块。在这个代码块中,我们可以对writer做恣意操纵。如许我们就利用了“open”高低文办理器,它包管我们的代码既文雅又平安。它杰出的完成了try-finally的义务。
open函数既可以当作一个复杂的函数利用,又可以作为高低文办理器。这是由于open函数前往了一个文件范例(filetype)变量,而这个文件范例完成了我们之前用到的write办法,可是想要作为高低文办理器还必需完成一些特别的办法,我会在接上去的大节中先容。
3.自界说高低文办理器

让我们来写一个“open”高低文办理器。
要完成高低文办理器,必需完成两个办法–一个卖力进进语句块的筹办操纵,另外一个卖力分开语句块的善后操纵。同时,我们必要两个参数:文件名和翻开体例。
Python类包括两个特别的办法,分离名为:__enter__和__exit__(双下划线作为前缀及后缀)。
当一个对象被用作高低文办理器时:
__enter__办法将在进进代码块前被挪用。
__exit__办法则在分开代码块以后被挪用(即便在代码块中碰到了非常)。
上面是高低文办理器的一个例子,它分离进进和分开代码块时举行打印。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classPypixContextManagerDemo:
def__enter__(self):
printEnteringtheblock
def__exit__(self,*unused):
printExitingtheblock
withPypixContextManagerDemo():
printIntheblock
#Output:
#Enteringtheblock
#Intheblock
#Exitingtheblock

注重一些工具:


  • 没有传送任何参数。
  • 在此没有利用“as”关头词。
  • 稍后我们将会商__exit__办法的参数设置。
我们怎样给一个类传送参数?实在在任何类中,都可使用__init__办法,在此我们将重写它以吸收两个需要参数(filename,mode)。
当我们进进语句块时,将会利用open函数,正如第一个例子中那样。而当我们分开语句块时,将封闭统统在__enter__函数中翻开的工具。
以下是我们的代码:
<p>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classPypixOpen:
<p>def__init__(self
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-29 07:06:11 | 只看该作者
其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。
变相怪杰 该用户已被删除
板凳
发表于 2015-1-31 15:40:03 | 只看该作者
对我们学习操作系统有很大的帮助,加深我们对OS的理解。?
飘灵儿 该用户已被删除
地板
发表于 2015-2-4 07:09:34 | 只看该作者
选择交流平台,如QQ群,网站论坛等。
愤怒的大鸟 该用户已被删除
5#
 楼主| 发表于 2015-2-6 20:02:27 | 只看该作者
目前全球有超过一百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,RedhatLinux和DebianLinux是网络管理员的理想选择。
精灵巫婆 该用户已被删除
6#
发表于 2015-2-12 10:29:05 | 只看该作者
我们这一代90后,从小接触的是windows98,家里条件好的自己有电脑装的是2000,后来又有了XP,上大学时又有了win7。
冷月葬花魂 该用户已被删除
7#
发表于 2015-2-12 18:52:18 | 只看该作者
尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.
兰色精灵 该用户已被删除
8#
发表于 2015-2-17 20:38:13 | 只看该作者
熟读写基础知识,学得会不如学得牢。
再见西城 该用户已被删除
9#
发表于 2015-2-26 21:51:43 | 只看该作者
我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些OS管理。
小魔女 该用户已被删除
10#
发表于 2015-3-6 18:50:50 | 只看该作者
选择交流平台,如QQ群,网站论坛等。
蒙在股里 该用户已被删除
11#
发表于 2015-3-10 17:52:22 | 只看该作者
Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问。
只想知道 该用户已被删除
12#
发表于 2015-3-13 08:50:06 | 只看该作者
选择交流平台,如QQ群,网站论坛等。
乐观 该用户已被删除
13#
发表于 2015-3-20 17:31:01 | 只看该作者
用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 13:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表