仓酷云

标题: Linux教程之Python注释器简介(4):静态言语仓酷云 [打印本页]

作者: 兰色精灵    时间: 2015-1-18 11:21
标题: Linux教程之Python注释器简介(4):静态言语仓酷云
开发linux发行版的人都是通读过linux内核代码,对linux原理极其精通的人。
这是Python注释器简介的第四部分。浏览第一部分、第二部分和第三部分。假如你喜好这个系列的话,那就把它分享到HackerSchool吧。我是那边的办理员。
当我入手下手研讨python外部事情的时分,我一向很狐疑为何可以举行“编译”的python仍是“静态言语”。一般,我们都将这两个词作为一对反义词——“静态言语”1包含Python、Ruby和Javascript等,而“编译言语”则包含C、Java和Haskell等。
人们一般所说的“编译言语”是指可以编译出合用于x86、ARM等的指令2(感化于真实的呆板)的言语。一种“注释性”言语不是基本就没有编译器3就是只编译成一其中间暗示,好比字节码。字节码的指令不是感化于任何硬件的,而是假造机。Python就属于后者:Python的编译器将天生的字节码传送给Python注释器。4
Python注释器将经由过程假造机做很多事情使得字节码得以注释。至于假造机,我们会在第五部分会商。
今朝为止,我们对编译息争释的观点仍是笼统的。经由过程上面这个例子我们能加倍明晰:
1
2
3
4
5
6
7
8
9
10
>>>defmodulus(x,y):
...returnx%y
...
>>>[ord(b)forbinmodulus.func_code.co_code]
[124,0,0,124,1,0,22,83]
>>>dis.dis(modulus.func_code)
20LOAD_FAST0(x)
3LOAD_FAST1(y)
6BINARY_MODULO
7RETURN_VALUE

这是一个函数和它的字节码经由过程反汇编程序的了局。一旦我们界说了modulus函数,它就被编译了而且天生了一个不克不及被修正的代码对象。
这应当很简单推算。键进modulus(%)使编译器收回指令BINARY_MODULO。以是假如我们要盘算一个余数的话,这个函数就可以够发扬感化了。
1
2
>>>modulus(15,4)
3

如许看,它一般事情。但假如我们不传送数字给它呢?
1
2
>>>modulus("hello%s","world")
helloworld

慢着,这是怎样了?你之前大概见到过,但它一般是这么写的:
1
2
>>>print"hello%s"%"world"
helloworld

当BINARY_MODULO处置两个字符串的时分,它默许实行字符串插值而不是求余数。这就是静态范例的典范例子。编译器在天生modulus的代码对象的时分,它完整不晓得x和y是字符串、数字仍是别的范例。它只是收回一些指令罢了:加载一个名字,加载另外一个名字,BINARY_MODULO这个两个对象,然后前往了局。至于弄清BINARY_MODULO真正指甚么则是注释器的事情。
我想我们疏忽了一些工具。我们的函数modulus可以盘算余数大概格局化字符串,另有吗?假如我们界说一个可以呼应__mod__的自界说对象的话,我们还能做良多。
<p>1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>>classSurprise(object):
<p>...def__init__(self
作者: 飘飘悠悠    时间: 2015-1-20 21:11
发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回复每个帖子的义务。它不是技术支持。
作者: 老尸    时间: 2015-1-30 05:19
掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
作者: 飘灵儿    时间: 2015-1-30 21:08
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
作者: 分手快乐    时间: 2015-2-5 20:58
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
作者: 因胸联盟    时间: 2015-2-8 07:43
学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。
作者: 山那边是海    时间: 2015-2-18 01:11
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
作者: 蒙在股里    时间: 2015-2-28 03:16
可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。?
作者: 爱飞    时间: 2015-2-28 21:58
安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
作者: 愤怒的大鸟    时间: 2015-3-9 14:34
为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。
作者: 只想知道    时间: 2015-3-11 11:40
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
作者: 第二个灵魂    时间: 2015-3-18 09:04
得到到草率的回答或者根本得不到任何Linux答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
作者: 深爱那片海    时间: 2015-3-25 14:29
说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。?




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2