Linux 版 (精华区)

发信人: emacs (被淹死的鱼), 信区: Linux
标  题: 第一章 开始了解Python -- 1
发信站: 哈工大紫丁香 (Sat Jun 15 09:44:09 2002) , 转信

1.1. 了解

下面是一个完全可运行的Python程序。

它可能对你来说绝对无法理解。对此不用担心,我们将逐行的进行剖析。但是首先把代码
先通读一遍,看一看你能够理解多少。

例 1.1. odbchelper.py

def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, params[k]) for k in params.keys()])

if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)你应该已经得到或下载在本书中所用到的这
个例子和其它例子的源代码。确实的话,现在打开odbchelper.py 。如果还没有,将这个
例子拷贝粘贴到一个文件中,将其存为odbchelper.py。现在运行它,看一下发生会什么。

 
在Windows版的Python IDE中,你可以通过File->Run (Ctrl-R)菜单运行一个模块。输出结
果会显示在交互的窗口内。 
 
在MacOS版的Python IDE中,你可以通过Python->Run window (Cmd-R)菜单运行一个模块,
但是你必须首先设置一个重要的选项。在IDE中打开模块,通过点击窗口右上角的黑色三角
,会弹出模块的选项菜单,确认"Run as __main__"被选中。这个选项同模块保存在一起,
所以对每个模块你都要做一遍。
 
在UNIX兼容的系统中(包括Mac OX X),你可以从命令行运行一个模块:
python odbchelper.py 

例 1.2. odbchelper.py 输出结果

server=mpilgrim;uid=sa;database=master;pwd=secret
1.2. 声明函数

象大多数其它语言,Python拥有函数。但是不象C++或Java,它没有独立的接口声明和实现
声明。一旦需要一个函数,声明它,编码就行了。

例 1.3. 声明 buildConnectionString 函数

def buildConnectionString(params):有几件事情需要注意的。首先,关键字 def 为函数
声明的开始。不象VB,Python并不区分有返回值的函数与无返回值的函数。它没有子程序
。全部都是函数,所有的函数都以 def 开始。

其次,函数没有定义返回的数据类型。实际上,甚至不需要指定是否会返回一个值。函数
并不关心第一种情况或第二种情况。如果函数执行了一个 return 语句,它将返回一个值
,否则会返回 None (Python的空值)。

第三,参数 params 并不需要指明数据类型。在Python中,变量不需要被明确类型。Pyth
on会指出一个变量是什么类型,并在内部保持记录。
 
自动数据类型处理是一把双刃剑。它很方便,相当的强大。但是它带来额外的负担,需要
你去理解Python会在什么时候并且会如何将数据强制转化为不同的类型。 

1.3. 文档化函数

可以通过给出一个文档字符串文档化一个Python函数。

例 1.4. 定义 buildConnectionString 函数的文档字符串

def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""三重双引号的引用表示一个多行字符串。在定义一个文档字符串
的时候,你会看到它们经常被使用。

任何在三重双引号中的东西都是函数的文档字符串,它们用来说明函数可以做什么。如果
存在文档字符串,它必须要在函数中的被首先定义(也就是说在冒号后面被定义)。在技术
上不需要给函数定义文档字符串,但是你应该这样做。我相信在你所参加过的每一个编程
课上已经听到过这一点,但是Python会给你一些其它的机制:文档字符串在运行时可作为
函数的属性。
 
许多Python IDE使用文档字符串来提供上下文相关提示,这样当你敲入一个函数名,它的
文档字符串将显示为提示框。这一点相当的有用,但是完全要看你写的文档字符串的好坏
了。 

1.4. 每个都是对象
万一你没听到,我刚才说了Python函数有属性,那些属性在运行时可用。


函数,如同在Python中的每个东西,是一个对象。

例 1.5. 存取 buildConnectionString 函数的文档字符串

>>> import odbchelper                              
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"sec
ret"}
>>> print odbchelper.buildConnectionString(params) 
server=mpilgrim;uid=sa;database=master;pwd=secret
>>> print odbchelper.buildConnectionString.__doc__ 
Build a connection string from a dictionary

Returns string.  第一行将 odbchelper 程序作为模块导入。一旦你导入一个模块,你可
以引用它的任何的公共函数,类,或属性。模块可以通过这种方法来使用其它模块的功能
,也可以在IDE中实现它。这是一个很重要的概念,在后面将谈得更多。 
  当你想使用定义在被导入模块中的函数时,必须包括模块的名字。所以你不能只使用 b
uildConnectionString,而应该为 odbchelper.buildConnectionString。如果你曾经用过
Java中的类,对于这一点应该非常熟悉。 
  如你想象的替换调用函数,我们可以访问了函数的属性,__doc__。 

在Python中每个东西都是对象,并且几乎每个东西都有属性和方法。[1] 所有的函数都有
一个内置的属性 __doc__,它会返回在函数源代码中定义的文档字符串。

这一点如此重要,所以我会在前几讲中重复它,以防你忘记了:在Python中的每个东西都
是对象。字符串是对象。列表是对象。函数是对象。甚至模块是对象,这一点我们很快会
看到。

1.5. 缩排代码

Python函数没有明显的 begin 或 end,或任何括号或大括号,可以标识函数从哪里开始,
又在哪里结束。唯一的分隔是通过一个冒号(:)和代码本身的缩排来表示。

例 1.6. 缩排 buildConnectionString 函数

def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, params[k]) for k in params.keys()])代码块(函
数,if 语句,for 循环,等等)通过它们的缩排来定义。缩排表示块的开始,非缩排表示
结束,不存在明显的括号,大括号,或关键字。这就意味着空白是有意义的,并且要一致
。在这个例子中,函数代码(包括文档字符串)缩近了4个空格。不一定非要是4个,只要一
致就可以了。第一行没有缩近,则不算在函数内。

在经过开始的一些反对和同Fortran相比后的挖苦之后,你将会心平气和地对待它,开始理
解它的好处。一个主要的好处是,所有的Python程序看上去差不多,因为缩排是语言的要
求而不是风格问题。这样就更容易阅读和理解他人的Python代码。



--

※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 211.93.34.115]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.863毫秒