python 解决文件和解释器版本不同如何解决

转向语音处理中的开源标准:使用 Python 将普通词典文件转化为 XML
时间: 11:22:02
简介许多完善的软件项目已经使用普通文本配置和资源文件很多年了,但没有出现什么重大问题。随着项目的扩展和复杂性的增加,对更高严谨性和更强适应性的需求也随之增加。通过 XML 以及使用具体标准的 XML 应用程序,您可以得到以下获益:跨项目和跨平台兼容性、稳健性,以及在 Unicode 等领域的可扩展性。常用缩略词HTK:隐马尔可夫模型工具包 (Hidden Markov Model Toolkit)PLS:发音词汇规范 (Pronunciation Lexicon Specification)XML:可扩展标记语言 (eXtensilble Markup Language)
通过将普通文本文件转化为相关的开源标准,您还可以提高灵活性和可靠性。语音识别工作中的词典就是本文使用的一个很好的例子。不管您的开源项目是否转而使用 XML 格式的资源文件,您都可以在不损失功能的情况下在您的工作中运用 XML 标准。在本文中,我们将学习如何轻松地在普通文本和 Pronunciation Lexicon & & & & & & &Specification (PLS) 格式之间进行转换。几个示例展示如何存储 PLS 格式的自定义词典,并将数据提取为所需的普通文件。示例:词典词典是在语音识别工具中使用的单词列表。它们包含的信息涉及到如何打印或用图形显示单词,它如何使用音素发音。经常与 Hidden Markov Model Toolkit (HTK) 一同使用的词典在语音控制项目中得到广泛使用。清单 1 是来自一个 VoxForge HTK 词典的一段摘录。清单 1. 清单 1 来自一个 VoxForge HTK 词典的一段摘录AGENCY
ey jh ih n s iy
ax jh eh n d ax
[AGENT] ey jh ih n t
ey jh ih n t s
ey jh ih z清单 1 中的文件包含三个以制表符分隔的字段: & &一般描述单词的标签 & &当您希望打印或在屏幕上显示一个单词时围绕单词的方括号(字素) & &来自 Arpabet 集(参阅 参考资料)的一系列单一空格分隔的音素,描述单词的读音在上述示例中使用英语发音,多半包含在 American Standard Code for Information Interchange (ASCII) 字符中。CMU Sphinx 项目以类似的方式将词典(或字典)存储在 CMU Sphinx 上下文中。清单 2 给出一段摘录。清单 2. 来自一个 CMU Sphinx 词典的一段摘录agency
EY JH AH N S IY
AH JH EH N D AH
agendas AH JH EH N D AH Z
EY JH AH N T
EY JH AH N T S
EY JH ER在 清单 2 中只有两个字段:单词/字素及其音素。两个词典示例有一些细微差别: & &单词和音素是完全不同的类型。 & &音素有一些微妙的差异。 & &对待标点符号(逗号和惊叹号等)的方式稍有不同。您可以在目前下载的 PocketSphinx 中的 cmu07a.dic 文件中看到整个字典。由于词典给出特定单词的发音,您可能需要编辑文件以适应特定的人或方言。久而久之就可以在自定义词典中建立起知识资产了。使用文本编辑器很容易就可以编辑普通文件,但也易于引入错误,比如:使用文件标准以外的分隔符,插入非 ASCII 字符,以错误的顺序放置字段,不当地对字段进行排序,在需要的地方缺少方括号,等等。普通文件还有一点不足之处。在您构建自定义文件时,始终与其他语音项目不兼容。而标准 XML 格式(比如 PLS)的词典,一旦被两个项目识别到,在两者中都能立即相互兼容。语音词典规范 (Pronunciation Lexicon Specification)PLSA 有一个简单的基本格式,如 清单 3 所示。清单 3. 清单 3 基本 PLS 格式&?xml version="1.0" encoding="UTF-8"?&
&lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-/pls.xsd"
alphabet="ipa" xml:lang="en-US"&
&lexeme ...&
&grapheme&...&/grapheme&
&phoneme ...&...&/phoneme&
&/lexicon&XML 描述可包含多个 lexeme 子元素的 root 元素 lexicon。每个 lexeme 可以包含多个 grapheme 元素和多个 phoneme 元素。规范允许您覆盖 alphabet 属性,但不允许您覆盖 xml:lang 语言属性。要将词素存储为不同的语言,您非常需要分离 PLS 词典文件。这个词典中的默认字母系统是 ipa,它是指表示发音的 International Phonetic Alphabet (IPA) 系统。IPA 音素表示法是多字节 Unicode 字符。HTK 和 Sphinx 都使用纯 ASCII 代码。本文稍后会讨论这个重要考虑因素。使用 PLS 规范的优势在于,它添加了更加严谨的结构,能够让您存储更多信息,比如词性和具体字母。词性细节在英语中很重要,因为一些拼写起来相同的单词(同形异义词)发音不同,具体视语法角色而定。例如,perfect 在作为形容词和作为动词时发音不同,因为重音在不同的地方。属性中存储的额外信息能够让您根据需要从整个文件提取特定记录。使用这一方法,您可以在多个 phoneme 元素中搜索一个特定的字母。将 PLS 词典看作是一个词典信息数据库,从中您可以提取与所使用的语音工具相关的详细信息。清单 4 是一个 PLS 格式的示例。清单 4. 清单 4 一个 PLS 格式的单词&?xml version="1.0" encoding="UTF-8"?&
&lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-/pls.xsd"
alphabet="ipa" xml:lang="en"&
&lexeme role="noun"&
&grapheme&agency&/grapheme&
&phoneme alphabet="x-htk-voxforge"&ey jh ih n s iy&/phoneme&
&phoneme alphabet="x-cmusphinx"&EY JH AH N S IY&/phoneme&
&/lexicon&清单 4 中的示例仅存储一个可能有两个音素表示的单词。您可以使用 alphabet 属性过滤出其中一个 phoneme 字符串。lexeme 元素显示 noun 的 role 属性。这里面虽然信息量大,但在本例中是冗余的,因为该单词仅作为一个名词使用,没有复杂的发音情况。通过并排放置两个不同来源的 phoneme 表示,您已经可以分辨出细微的差别了。该信息在解决语音识别问题方面会很有帮助。CMU Sphinx 和 HTK 都不能直接使用 PLS 词典,但是 HTK 工具包的 simon前端可以。如果您直接使用 HTK 或 Sphinx,一定要确保可以轻松实现普通文件和 PLS 之间的来回转换,而不丢失任何信息。 & & & & & & & &以下几节展示如何使用 Python 实现普通文件与 PLS 之间的来回转换。假定您在普通词典文件中有自定义信息。转化为 PLS清单 5 中的代码使用 Python,但是您可以通过许多其他方式完成相同的工作。有些人希望使用可在每一小步检查 XML 稳健性的库,获得更多有关问题出处的即时反馈,特别是当源文件较大且易于包含错误和不一致性时。下面的示例将检查留到最后一步,这意味着一定的置信水平,表示普通文件状态良好。
清单 5. 清单 5 转化为 PLSfrom elementtree.ElementTree import parse
import string as str
import sys
import cgi
# call with
python flat2pls.py vox
python flat2pls.py spx
if len(sys.argv) == 2:
src = sys.argv[1]
exit("wrong args")
outfile = "mylex"+src+".pls"
print "out is "+outfile
out = open(outfile,"w")
out.write('&?xml version="1.0" encoding="UTF-8"?&n
&lexicon version="1.0"n
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"n
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"n
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexiconn
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-/pls.xsd"n
alphabet="ipa" xml:lang="en"&')
# now the lexemes
if src == "vox":
f = open("vf.lex","r")
for line in f:
line = str.strip(line)
word = str.split(line,"t")
#gr = str.strip(word[1],"[]")
gr = cgi.escape(word[0])
out.write('n
&grapheme&'+gr+'&/grapheme&n
&phoneme alphabet="x-htk-voxforge"&'+word[2]+'&/phoneme&n
&/lexeme&')
else: # src is sphinx
f = open("cmu.dic","r")
for line in f:
line = str.strip(line)
word = str.split(line,"t")
gr = cgi.escape(word[0])
out.write('n
&grapheme&'+gr+'&/grapheme&n
&phoneme alphabet="x-cmusphinx"&'+word[1]+'&/phoneme&n
&/lexeme&')
# ended lexemes
out.write('n&/lexicon&n')
out.close()
# now check the output is ok
tree = parse(outfile)
lexicon = tree.getroot()
mylexcount = 0
for lexeme in lexicon:
mylexcount += 1
print 'Found %(number)d lexemes' % {"number":mylexcount}清单 5 首先从 XML 解析库 elementtree 和一些支持的库导入模块开始。导入不同版本上的 ElementTree 会涉及到稍微不同的语法,具体取决于您安装模块的方式。示例代码来自 openSUSE,其中模块是从源头安装的,但 Ubuntu 可能需要 from xml.etree.ElementTree import parse。模块 str 支持一些字符串操作,sys 提供给您对文件的访问权限,且 cgi 提供处理 XML 数据所必要的一个非常重要的转义例程。代码打算获取一个命令行界面 (CLI) 参数,告诉它是否要从 CMU Sphinx 格式或 HTK/VoxForge 转换。然后示例代码打开输出文件,并编写适合 PLS 的 XML 序言。由于在此阶段您不存储任何 Unicode 字符,所以只需打开文件仅进行纯 ASCII 访问就行了。此时,清单 5 中的代码是:逐行处理源文件,将字段分为独立的字符串,编写 lexeme、grapheme 和 phoneme 组件。标识 phoneme,如果传入的数据来自 VoxForge 词典,那么使用属性 alphabet=&x-htk-voxforge&,如果数据来自 Sphinx,那么使用 alphabet=&x-cmusphinx&。当导入第一个字段时,它可能包含在 XML 中引起问题的字符,比如连字符 (&),除非使用 cgi.escape() 进行转义。最后是代码:编写关闭标签关闭 PLS 文件,然后将其重新加载为一个 XML 文件阅读整个文件,计算 lexeme 元素报告词素的计数如果报告了计数,那么 XML 显得可靠且符合语法规则。清单 6 是来自 VoxForge HTK 词典的一段结果摘录清单 6. 清单 6 VoxForge HTK 词典结果摘录...
&grapheme&AGENDA&/grapheme&
&phoneme alphabet="x-htk-voxforge"&ax jh eh n d ax&/phoneme&
&grapheme&AGENT&/grapheme&
&phoneme alphabet="x-htk-voxforge"&ey jh ih n t&/phoneme&
...从 PLS 转换您需要知道的一点是,您可以轻松实现从 PLS 格式到普通文件的转换。清单 7 中的代码假定您有存储为 PLS 格式文件的词典,而且您的语音识别项目只能使用 HTK 或 CMU Sphinx 格式的普通文件。清单 7. 从 PLS 转换from elementtree.ElementTree import parse
import string as str
import sys
# call with
python pls2flat.py x-htk-voxforge & mylexicon
python pls2flat.py x-cmusphinx & mylexicon.dic
if len(sys.argv) & 1:
alpha = sys.argv[1]
if alpha == "x-htk-voxforge":
tree = parse("mylexvox.pls")
tree = parse("mylexspx.pls")
lexicon = tree.getroot()
for lexeme in lexicon:
for child in lexeme:
#print child.tag
if child.tag[-8:] == 'grapheme':
if alpha == 'x-htk-voxforge':
gr = str.upper(child.text)
print gr,"t","["+gr+"]","t",
gr = child.text
print gr,"t",
if child.tag[-7:] == 'phoneme':
if child.get('alphabet') == alpha:
print child.text这一段简短的脚本使用 elementtree 库来解析 PLS XML 文件。它建立 root 元素,然后迭代子词素,寻找 grapheme 和 phoneme,并将值写到相关格式的文本文件中。脚本请求标签中的最后 8 个字符,即 grapheme,因为标签会有一个命名空间前缀返回。它为 HTK 重新创建三个字段,为 CMU Sphinx 创建两个字段。合并和处理 Unicode清单 8 中的脚本使用两个 PLS 文件来创建一个常见的 PLS 文件,其中包含两个原始文件的信息。它还将 VoxForge phoneme 字符串转换为 Unicode 并将 Unicode 版本存储在用 alphabet=&ipa& 属性标识的一个独立的 phoneme 元素中。清单 8. 清单 8 合并 Unicode#! /usr/bin/python -u
# -*- coding: utf-8 -*-
# challenge is to merge two pls files
# given two pls files, merge them into one
import elementtree.ElementTree as ET
from elementtree.ElementTree import parse
import string as str
import codecs
import cgi
treevox = ET.parse("mylexvox.pls")
treespx = ET.parse("mylexspx.pls")
lexvox = treevox.getroot()
lexspx = treespx.getroot()
phons = { 'aa':u'ɑ','ae':u'ae','ah':u'?','ao':u'?','ar':u'?r','aw':u'a?',
'ax':u'?','ay':u'a?','b':u'b','ch':u't?','d':u'd','dh':u'?','eh':u'?',
'el':u'?l','en':u'ɑn','er':u'?r','ey':u'e?','f':u'f',
'g':u'ɡ','hh':u'h','ih':u'?','ir':u'?r','iy':u'i','jh':u'd?','k':u'k','l':u'l',
'm':u'm','n':u'n','ng':u'?','ow':u'o?','oy':u'??','p':u'p','r':u'r','s':u's',
'sh':u'?','t':u't','th':u'θ','uh':u'?','ur':u'?r','uw':u'u','v':u'v',
'w':u'w','y':u'j','z':u'z','zh':u'?','sil':'' }
def to_utf(s):
myp = str.split(s)
myipa = []
for p in myp:
myipa.append(phons[p])
return str.join(myipa,'')
outfile = "my2lexmrg.pls"
out = codecs.open(outfile, encoding='utf-8', mode='w')
out.write('&?xml version="1.0" encoding="UTF-8"?&n
&lexicon version="1.0"n
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"n
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"n
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexiconn
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-/pls.xsd"n
alphabet="ipa" xml:lang="en"&')
# scan the two pls, create dictionary
voxdict = {}
for lexeme in lexvox:
gr = str.lower(lexeme[0].text)
ph = lexeme[1].text
voxdict[gr] = {ph,}
for lexeme in lexspx:
gr = lexeme[0].text
ph = lexeme[1].text
if gr in voxdict:
voxdict[gr].add(ph)
voxdict[gr] = {ph,}
for gr in sorted(voxdict.iterkeys()):
out.write('n
&grapheme&'+cgi.escape(gr)+'&/grapheme&')
#print "%s: %s" % (key, voxdict[key])
for ph in sorted(voxdict[gr]):
alph = 'x-htk-voxforge' if ph.islower() else 'x-cmusphinx'
out.write('n
&phoneme alphabet="'+alph+'"&'+ph+'&/phoneme&')
if ph.islower():
phipa = to_utf(ph)
out.write(u'n
&phoneme alphabet="ipa"&'+phipa+'&/phoneme&')
out.write('n
&/lexeme&')
# done, close files
out.write('n&/lexicon&')
out.close()
# now check the output is ok
tree = parse(outfile)
lexicon = tree.getroot()
mylexcount = 0
for lexeme in lexicon:
mylexcount += 1
print 'Found %(number)d lexemes' % {"number":mylexcount}首先以 hashbang (#!) 表达式开始,后接标识 Python 解释器的一个特殊指示符。在第二行上,该代码包含 Unicode 字符。然后脚本导入大量模块,包括 elementtree、codecs 和 cgi,这些模块在处理 Unicode 时很有用。您告诉解释器两个 PLS 文件在哪里,并指向其 root 元素。
phons 变量存储一个特殊的字典,其中包含从 CMU Arpabet 代码到等价的 Unicode 组合的一个映射。该字典将现有的 phoneme 字符串转换为一个 Unicode 版本。您可以根据自己的需求随意修改映射,例如,您可能觉得 Unicode 中 'aa' 的等价词是 u'ɑ:',这拉长了 a 的发音。一个定义好的函数 to_utf() 将 ASCII Arpabet 字符串转化为 Unicode。基础工作的最后一部分是打开一个文件来存储输出,确保该文件知道它要准备好接受 Unicode,并将 PLS 序言写到其中。现在准备处理文件,方式就是创建两个特殊的内部 Python 字典,一个是各个 PLS 文件,使用 elementtree 库扫描它们。假设 grapheme 将是第一个子元素,而 phoneme 是词素的第二个子元素。脚本将来自第一个文件的所有记录添加到新的合并字典。在扫描第二个文件时,如果键已经存在于新的合并字典中,您可以添加其音素集。如果不存在,在合并的字典中创建一个新的键项。在循环结束时,新的合并字典同时包含来自原始文件和相关的一个或两个 phoneme 字符串的键。从刚才创建的合并编写新的 PLS 文件。在扫描整个字典时,添加 alphabet 属性来区分两个 phoneme。写出现有的音素之后,创建一个新的 phoneme 字符串,它是 CMU Arpabet 字符串的 Unicode 等价字符串,您可以根据您的需要从 HTK 或 Sphinx 版本(或两者)获取它。最后,结束 root 元素,关闭文件,并再次解析它,就像之前检查它符合语法规则一样。结果类似于 清单 9。清单 9. 清单 9 合并结果...
&grapheme&agenda&/grapheme&
&phoneme alphabet="x-cmusphinx"&AH JH EH N D AH&/phoneme&
&phoneme alphabet="x-htk-voxforge"&ax jh eh n d ax&/phoneme&
&phoneme alphabet="ipa"&?d??nd?&/phoneme&
&grapheme&agendas&/grapheme&
&phoneme alphabet="x-cmusphinx"&AH JH EH N D AH Z&/phoneme&
&grapheme&agent&/grapheme&
&phoneme alphabet="x-cmusphinx"&EY JH AH N T&/phoneme&
&phoneme alphabet="x-htk-voxforge"&ey jh ih n t&/phoneme&
&phoneme alphabet="ipa"&e?d??nt&/phoneme&
&grapheme&agent's&/grapheme&
&phoneme alphabet="x-cmusphinx"&EY JH AH N T S&/phoneme&
...有了合并的 PLS 字典,您可以应用 Extensible Stylesheet Language (XSL) 或其他任何程序来生成需要的结果,不管是普通文件还是新的特定 PLS 文件。在理论上,您也可以在该文件中存储其他 phoneme 字符串。但是,这是对 PLS 规范的一个非标准使用。Kai Schott 已经做了大量 PLS 相关工作,而且已经准备好了几个不同语言版本的文件以供下载,特别是德语版本。未解决的问题尽管您可以从普通文件获得大量信息,以下问题仍然未得到解决。从多个字素中选择有时您需要处理同一语言中一个单词的多个拼写。对于两个拼写法,角色和音素是相同的,因此在同一个词素中有多个字素。但是,在 PLS 中您无法添加一个属性到 grapheme 元素,就像 phoneme 元素的 alphabet 属性。缩略词词典常常包含缩略词。PLS 在一个名为 &alias& 的 lexeme 的子元素中处理这些。要从一个普通文件自动构建一个 PLS,您需要一种方式来将缩略词与词典中真正的单词区分开来。普通文件不一定有这个信息。角色/词性与缩略词一样,普通文件中不提供词性信息来将 role 属性构建到 PLS 中。结束语在本文中,您了解了如何非常简单地进行普通文件和 PLS 格式文件之间的转换。存储 PLS 格式的词典有潜在的优势。开源项目可能使用、也可能没有使用 XML 格式的资源文件。这是项目经理要做出的决策。他们自己就可以评估资源,并且以他们在社区中普遍接受的最佳方式应用它们。同时,您可以在自己的工作中运用 XML 标准,而不损失任何功能。对于在语音识别工作中使用的词典和字典,您可以通过对 PLS 格式的自定义词典评分来增加跨项目能力、可靠性和实用性。您可以轻松按需提取数据到所需的普通文件。
$T.total > 0 && $T.page <= $T.pageNum}
{#foreach $T.data as r}
{$T.r.formt_tm}{#if $T.r.nickname}{#else}匿名{#/if}
{$T.r.content}
{#if $T.page > 1 && $T.pageNum > 1)
$T.s_num > 2}
{#for index = $T.s_num to $T.e_num}
$T.pageNum > $T.pageNavSize+ 2 && $T.s_num != $T.pageNum - $T.pageNavSize}
{#if $T.pageNum > 1}
{#if $T.pageNum != $T.page && $T.pageNum > 1}
<a href="javascript:void(0);" page="{$T.page 下一页
您的回应...
也许你感兴趣
(C)2012 本站提供的内容来源于广大网络用户,我们不保证内容的正确性。如果转载了您的内容,希望删除的请联系我们!!#{item.text}
?12?6?30?6?12?6?12?6?18?6?18?6?18?12?18?12
?98?30?18?6?30?6?18?12?18?6?45?12?60?6?12?6
> 浏览评论
最强脚本语言:Python for iOS —— App Store 上绝无仅有的编程语言解释器
v1.6 的评论
1946 年 2 月 14 日,第一台电子计算机在美国诞生。拉开了第三次工业革命,在 60 多年间计算机飞速发展。已经成为人们生活中不可或缺的一部分,这是无可争议的。计算机语言也在计算机的发展中飞速发展,从第一台电子计算机的机器语言到汇编,到了高级语言。高级语言的高可以理解为高开发效率。但一般会牺牲执行(运行)效率。
随着互联网的飞速发展,解释执行语言开始占据一席之位(代表:Java)。介于程序语言和网络语言的脚本语言也在这个时代中开始走入人们的视线。可能有人会问,有了程序语言和网络语言,那么脚本还有必要吗?当然有,脚本语言拥有编程语言无法企及的开发效率,它一般节省了编程语言中的编译-链接-运行的环节。而且其多为解释性语言也可以在浏览器中被解释出来。还有就是作为软件雏形,算法雏形,一次性程序的编写中占有很大的地位… . 不说废话了。如果想了解这些可以去搜索。
把目光从宏观的计算机世界转到 Python 这个语言上吧。我使用这语言有快 5 年时间了。2008 年这个语言发展得很快哦。2.6 版本出后的第三或者 4 个月就出了 3.0 版本。2.7.X 是作为过渡版本,既有 3.X 的语法也有 2.X 的语法,哪个版本都可以在上面使用。现在 Python for iOS 就是 2.7.3 这个版本。官方简介说在开发 3.2.0(貌似 Pc 快有了 3.3.0. 听说发布了…)。我第一次看见 Python 在 iOS 上是上次限免。我收下后耍过一次(+-*,import math..)给我感觉还是不错的。这几天又在上面耍了一下,发现居然支持绝大部分标准库(涉及 Win 的没有…)。而且还支持 C 的一些库比如 ctime,cmath,测试了一下传说黑客经常用的 ctypes(涉及系统的)没有。测试过的标准库如下
测试支持的(肯定还有,但是我不记得还有什么库了… . 有机会大家看里面的官方文档吧):pdb:调试程序用的,用处肯定不大。decimal:可以弥补二进制编码的缺陷,作为标准机器交互的时候很有用的。random:随机数socket:牛逼了,网络通信用的…errno:错误代码的…mmap:内存映射的,很少用的gzip:zip 文件读写(有机会要试试,或许可以代替 iOS 上的压缩软件哦)glob:可以返回目录下的文件名的 .. 支持通配符(正则表达式里的)signal:信号处理的,很少用的math:基本的库了,支持什么 sin,cos,abs,sqrt,pow … . cmath:来自 C 的数学库,比上面那个要实现得少一些,不过传说 cmath 的 sqrt 可以对负数开方就是支持虚数…os:支持底层的模块。操作系统接口服务什么的io:各类输入输出类的支持array:一个数据结构,比序列更加接近 C 的数组,只不过要预先确定格式cgi:牛逼了,可惜网络框架盛行的时代有点落伍了。不过 iPhone 上用这个干嘛… . time:时间操作的,比如现在几点了… . datetime:日期操作的,比如距离什么日子还有几天,5 天后是什么日期,星期几什么的。string:字符串操作的库,类似 C 语言(和 C ++,java 不同,后两个是以类型体现的,前者是操作)re:正则表达式,以 Perl 为基础来的。gc:垃圾回收的接口,一般用不上把… .
不支持的:
线程类的,比如 multiprocessing … .. ssl 模块… .. win 类的 winreg,msvcrt …bz2 SYS …
还有很多库,但是我记得就这么多了。
Python 作为非常强大的脚本语言。iPhone 上也非常好用,而且支持很多标准库。在苹果这个封闭的系统中仍然如此更是难能可贵,但是你可以不要期待类似于 C ++这类语言的编译器在 App Store 上面上架了(或许某天也有奇迹吧…)。在这个 Python for iOS 上,它支持了编写,解释执行,交互环境。我们已经不能再要求什么了…
功能上:4.0(精度没有电脑的好,电脑可以计算 2012 的 2012 次方),iOS 上好像只能是 10 … . 当然阶乘这类的也没有电脑的大,但是我们也用不上那么大的精度,何况这只是手机。)
操作上:4.0(界面不怎么诱人,电脑也是…)
剩下的我无话好说… . 这个是一个语言,其本身的功能还有很多,虽然基础语法可以很快掌握,但是博大精深的标准库也需要时日的。我这里也宣传一下 Python … .. 希望大家能爱上这个语言… ..
更新日期:&
爱Apps的其他评论(168)
Copyright (C) 2006 - . All rights reserved.您所在的位置: &
如何使用Python解释器进行程序编制
如何使用Python解释器进行程序编制
下面文章主要介绍的是Python解释器写成的一些程序,如果你已经知道了该如何编程,但是想简单了解一下,那就看一下下面的文章吧。
本文首先介绍一下Python解释器的历史,总结了Python的强大之处和不足并且指出了与其他脚本语言相比,以及Python解释器与其他语言的优势所在,欢迎大家学习切磋。
这篇文章已经被翻译为意大利、波兰、日本、塞尔维亚以及巴西葡萄亚语等许多种语言,而且正在被翻译为韩语。(译者:当然,现在已经包括了中文版本,只是作者并不知道。)
这篇文章和如何闯入别人的计算机系统之类的东西无关。我不关注那类事情,所以请不要email问我那些东西。 注意。要使此文中的例子正确运行,你应该把它们写在一个文本文件中,然后用解释器运行;不要试图直接在交互方式下运行它们--不是所有的都可以这样运行。
要用Python解释器写程序,你必须先安装一个Python解释器。它可以存在于大多数平台(包括Macintosh、Unix和Windows)。更多与此有关的信息可以在python的网站上找到。你还应该有一个文本编辑器(象emacs、notepad或者类似的东西)。
你大概可以看出它同火腿沙拉菜谱的相似性(尽管有些细微的差别)。但它是如何工作的呢?首先,以#开始的行叫做注释事实上会被计算机忽略。然而插入象这样小段的注释对于增强你程序的可读性来说是很重要的。 接下来,看起来象 foo = bar 这样的行叫做赋值。
对于 width = 20 这样的情况来说就是告诉计算机从这里开始width就代表20了。它还意味着一个名字“width”的变量从此被创建了(如果它先前已经存在,那么会被重新覆盖)。
所以,我们以后使用这个变量的时候,计算机就知道了它的值。然而,这事实上并不比计算矩形面积的那个程序更有意思。至少在我看来是这样。它有些僵硬。如果我们看到半径为31的圆该怎么办?
怎样让计算机知道?这有点象沙拉菜谱中的:“烧3到4分钟直到火腿熟了为止。”要知道何时烧熟,我们必须检查。我们需要反馈,或者提示。计算机如何知道我们圆形的半径?同样需要输入资料……我们可以做的是告诉计算机半径是多少: #&Calculate&all&the&primes&below&1000 &#&(Not&the&best&way&to&do&it,&but...) &result&=&[1] &candidates&=&range(3,&1000) &base&=&2&product&=&base&while&candidates: &&&&&while&product&&&&&&&&&&&if&product&in&candidates: &&&&&&&&&&&&&candidates.remove(product) &&&&&&&&&productproduct&=&product+base &&&&&result.append(base) &&&&&base&=&candidates[0] &&&&&product&=&base&&&&&del&candidates[0] &&&&&result.append(base) &&&&&print&result&
现在程序变得漂亮一些了……input是个被称为函数的东西。(很快你将学习创建你自己的函数。而input是解释器内建的函数。)仅仅写下 input 什么也不会做……你必须在它的后面放上一对括号。所以input()可以工作--它会简单的要求用户输入半径的长度。
而上面的那个版本对用户来说也许更友好一些,因为它首先打印出了一个问题。当我们将诸如提问字符“What is the radius?”之类的东西放在函数调用的括号中。这个过程被称为函数的参数传递。括号中的内容被称为参数。在上个例子中我们传递了一个提问作为参数以便input知道在获得答案前应该先打印什么。
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
Angular.js 是一个MV*(Model-View-Whatever,不管是MVC或者MVVM
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
9月的工作日被法定假日拆的零零散散,不知道各位的工
总结一下Java I/O文件读写基本类相关知识和概念。对于
今天是被国际上众多科技公司和软件企业承认的业内人士
本书既能够成为读者的理论支持,又可以作为构建可靠的、可伸缩的、可维护的并发程序的技术支持。本书并不仅仅提供并发API的清单
51CTO旗下网站}

我要回帖

更多关于 python解释器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信