Size: 10391
Comment:
|
Size: 10600
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 36: | Line 36: |
下面是我用 TortoiseSVN 生成的修订历史(只有修改后的)(不知道为什么,在我的M$ Win2K的机子上 svn diff总是显示为乱码,所以就不能提供详细的修订历史了) |
2007-06-27 <X2> odbchelper.xml
TableOfContents 用 <Xn> 标示的是[:XiaoQi:XiaQ]的修订List
Para 1:
但 还是让我们跳过这个部分吧
概览
pass
函数声明
Para 3:Python 不需要提定
明显的打字错误 返回值的数据类型
指定
Python 和其他编程语言数据类型的比较
- “xx类型定义语言”,这样的表达太罗嗦,按照一般的表达,改为“xx类型语言”
Para 3:一种在编译期间数据类型固定的语言
我认为原文的被动式在这里应该是表示动作而非状态
一种在编译期间就确定数据类型的语言
Para 3:大多数静态类型语言是通过要求在使用所有变量之前声明它们的数据类型来保证这一点的
此处逻辑上似乎有点问题,“所有”改为“任一”。相应地,“它们的”改为“其”。
大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的
Para -1:因为只要一个变量具有一个数据类型
此处采用更加动态的表达方式似乎更好
获得
文档化函数
Para 1:可以通过给出一个 doc string(文档字符串)
来 文档化一个 Python 函数
例2.2下,Para 1,Line -1:但是您可能会发现它们经常定义 doc string 的情况
怎么就没人嫌别扭呢
但是您可能会发现,它们经常被用于定义 doc string。
万物皆对象
Para 1:如果
您没在意,我刚才的意思是……
可能
例2.3,(1):模块是指……或者来自
一个大规模的 Python 程序
不符合中文习惯,严重的语法错误
或者一个大规模的 Python 程序的片段。
模块导入的搜索路径
它会按所有定义在 sys.path 中的目录进行搜索
它会按定义在 sys.path 中的目录逐个进行搜索
例2.4,(2):sys.path 是一个组成
当前搜索路径的目录列表。
指定
例2.4,(3):有一些,像 sys 模块,是……
有一些模块(像 sys)
代码缩进
Para 1:没有花括号,用于标函数的开始和结束
没有标明函数的开始和结束的花括号
例2.5,Para 1:代码块
是 通过它们的缩进来定义的
例2.5,Para 1,Line -1:不一定非要是 4
个 ,只要一致就可以了。没有缩进的第一行则
被视为 在函数体之外。
例2.6,(2):包括字符串、整数和其它如字典和列表(我们将在下一章学习)等类型
包括字符串、整数和其它类型,如字典和列表(我们将在下一章学习)
例2.6,(2):通过使用以逗号分割的值列表把几个东西输出到一行上
此处表达太罗嗦,且与下文重复了
只需用逗号隔开
例2.6,(3):如果 if 表达式计算为 true,{i} 紧跟着的 缩进块
会 被执行
测试模块
Para 1:您可以使用这些属性方便地测试您所书写
的模块。
编写
Para 2:有几点
重要的观察结果
个
Para 3:一个模块的 name 的值要看
您如何应用模块
取决于
下面是我用 TortoiseSVN 生成的修订历史(只有修改后的)(不知道为什么,在我的M$ Win2K的机子上 svn diff总是显示为乱码,所以就不能提供详细的修订历史了)
7 <para>大家都很清楚,其他书籍是如何一步步从编程基础讲述到构建完整的可运行程序的,但还是让我们跳过这个部分吧! 76 <para>其次,函数没有定义返回的数据类型。&python; 不需要指定返回值的数据类型;甚至不需要指定是否有返回值。实际上,每个 &python; 函数都返回一个值;如果函数执行过 &return; 语句,它将返回指定的值,否则将返回 &none; ( &python; 的空值) 。 93 <term>静态类型语言</term> 94 <listitem><para>一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。&java; 和 &c; 是静态类型语言。</para></listitem> 97 <term>动态类型语言</term> 98 <listitem><para>一种在运行期间才去确定数据类型的语言,与静态类型相反。&vbscript; 和 &python; 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。</para></listitem> 101 <term>强类型语言</term> 105 <term>弱类型语言</term> 106 <listitem><para>一种类型可以被忽略的语言,与强类型相反。&vbscript; 是弱类型的。在 &vbscript; 中,您可以将字符串 <literal>'12'</literal> 和整数 <literal>3</literal> 进行连接得到字符串<literal>'123'</literal>,然后可以把它看成整数 <literal>123</literal> ,所有这些都不需要任何的显示转换。</para></listitem> 109 <para>所以说 &python; 既是 <emphasis>动态类型语言</emphasis> (因为它不使用显示数据类型声明),又是 <emphasis>强类型语言</emphasis> (因为只要一个变量获得了一个数据类型,它实际上就一直是这个类型了)。</para> 117 <para>可以通过给出一个 &docstring;(文档字符串)来文档化一个 &python; 函数。</para> 124 <para>三重引号表示一个多行字符串。在开始与结束引号间的所有东西都被视为单个字符串的一部分,包括硬回车和其它的引号字符。您可以在任何地方使用它们,但是您可能会发现,它们经常被用于定义 &docstring;。</para> 133 <para>许多 &python; &ide; 使用 &docstring; 来提供上下文敏感的文档信息,所以当键入一个函数名时,它的 &docstring; 显示为一个工具提示。这一点可以说非常有用,但是它的好坏取决于您书写的 &docstring; 的好坏。</para> 145 <para>也许您没在意,我刚才的意思是 &python; 函数有属性,并且这些属性在运行时是可用的。</para> 163 <para>第一行将 <filename class="headerfile">&odbchelper_name;</filename> 程序作为模块导入。模块是指:可以交互使用的一个代码段,或者一个大规模的 &python; 程序的片段。(您在 <xref linkend="apihelper" endterm="apihelper.numberonly"/> 将会看到多模块 &python; 程序的许多例子。) 180 <para>在我们继续之前,我想简要地提一下库的搜索路径。当导入一个模块时,&python; 在几个地方进行搜索。明确地,它会对定义在 <varname>sys.path</varname> 中的目录逐个进行搜索。它只是一个list (列表),您可以容易地查看它或通过标准的list方法来修改它。(在本章的后面我们将学习更多关于list的知识。) </para> 197 <para>&syspath; 是一个指定当前搜索路径的目录列表。(您的输出结果可能有所不同,这取决于您的操作系统、正在运行的 &python; 版本和初始安装的位置。) &python; 将搜索这些目录 (按顺序) 来查找一个与您正试着导入的模块名相匹配的 <literal>.py</literal> 文件。</para> 200 <para>实际上,我没说实话。真实情况要比这更复杂,因为不是所有的模块都保存为 <literal>.py</literal> 文件。有一些模块(像 &sys;),是“内置模块”,它们实际上是置于 &python; 内部的。内置模块的行为如同一般的模块,但是它们的 &python; 源代码是不可用的,因为它们不是用 &python; 写的!( &sys; 模块是用 &c; 写的。) </para> 210 <para>在 &python; 中一切都是对象,并且几乎一切都有属性和方法。所有的函数都有一个内置的 &doc; 属性,它会返回在函数源代码中定义的 &docstring;;&sys; 模块是一个对象,它有一个叫作 <varname>path</varname> 的属性;等等。</para> 226 <para>&python; 函数没有明显的 <literal>begin</literal> 和 <literal>end</literal>,没有标明函数的开始和结束的花括号。唯一的分隔符是一个冒号(<literal>:</literal>),接着代码本身是缩进的。</para> 233 <para>代码块是通过它们的缩进来定义的。我所说的“代码块”是指:函数、&if; 语句、&for; 循环、&while; 循环,等等。开始缩进表示块的开始,取消缩进表示块的结束。不存在明显的括号,大括号或关键字。这就意味着空白是重要的,并且要一致。在这个例子中,函数代码 (包括 &docstring;) 缩进了 4 个空格。不一定非要是 4 个,只要一致就可以了。没有缩进的第一行则被视为在函数体之外。</para> 251 <para>在 &python; 中向屏幕输出内容非常容易,只要使用 &print; 即可。&print; 语句可以接受任何数据类型,包括字符串、整数和其它类型,如字典和列表(我们将在下一章学习)。甚至可以混在一起输出,只需用逗号隔开。所有值都输出到同一行,用空格隔开 (逗号并不打印出来) 。所以当用 <literal>5</literal> 来调用 <function>fib</function> 时,将输出“n = 5”。</para> 254 <para>&if; 语句是一种的代码块。如果 &if; 表达式计算为 true,紧跟着的缩进块会被执行,否则进入 &else; 块执行。</para> 277 <para>所有的 &python; 模块都是对象,并且有几个有用的属性。您可以使用这些属性方便地测试您所编写的模块。下面是一个使用 &if; &name; 的技巧。</para> 284 <para>在继续学习新东西之前,有几个重要的观察结果。首先,&if; 表达式无需使用圆括号括起来。其次,&if; 语句以冒号结束,紧跟其后的是 <link linkend="odbchelper.indenting">缩进代码</link>。</para> 289 <para>那么为什么说这个特殊的 &if; 语句是一个技巧呢?模块是对象,并且所有的模块都有一个内置属性 &name;。一个模块的 &name; 的值取决于您如何应用模块。如果 &import; 模块,那么 &name; 的值通常为模块的文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序一样直接运行模块,在这种情况下 &name; 的值将是一个特别的缺省值,&main;。</para>