Python学习笔记,第一个 Python 程序。

来源:互联网 发布:js函数数组查找字符串 编辑:程序博客网 时间:2024/06/05 05:57

1. odbchelper.py


def buildConnectionString(params):    """Build a connection string from a dictionary of parameters.    Returns string."""    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])if __name__ == "__main__":    myParams = {"server":"mpilgrim", \                "database":"master", \                "uid":"sa", \                "pwd":"secret" \                }    print buildConnectionString(myParams)

在 Windows 的 ActivePython IDE 中, 可以选择 File->Run… (Ctrl-R) 来运行 Python 程序。输出结果将显示在交互窗口中。

在 Mac OS 的 Python IDE 中, 可以选择 Python->Run window… (Cmd-R) 来运行 Python 程序, 但首先要设置一个重要的选项。在 IDE 中打开 .py 模块, 点击窗口右上角的黑色三角, 弹出这个模块的选项菜单, 然后将 Run as main 选中。 这个设置是同模块一同保存的, 所以对于每个模块您都需要这样做。

在 UNIX 兼容的操作系统中 (包括 Mac OS X), 可以通过命令行: python odbchelper.py 运行模块。

odbchelper.py 的输出结果:

server=mpilgrim;uid=sa;database=master;pwd=secret

2. 函数声明


与其它大多数语言一样 Python 有函数, 但是它没有像 C++ 一样的独立的头文件;或者像 Pascal 一样的分离的 interface/implementation 段。 一旦需要函数时, 像下面这样声明即可:

def buildConnectionString(params):

首先, 函数声明以关键字 def 开始, 接着为函数名, 再往后为参数, 参数放在小括号里。 多个参数之间 (这里没有演示) 用逗号分隔。
其次, 函数没有定义返回的数据类型。 Python 不需要提定返回值的数据类型;甚至不需要指定是否有返回值。实际上, 每个 Python 函数都返回一个值;如果函数执行过 return 语句, 它将返回指定的值, 否则将返回 None ( Python 的空值) 。
在 Visual Basic 中, 函数 (有返回值) 以 function 开始, 而子程序 (无返回值) 以 sub 开始。在 Python 中没有子程序。只有函数, 所有的函数都有返回值 (尽管可能为 None) , 并且所有的函数都以 def 开始。
最后需要指出的是, 在 Python 中参数, params 不需要指定数据类型。 Python 会判定一个变量是什么类型, 并在内部将其记录下来。
在 Java, C++ 和其他静态类型语言中, 必须要指定函数返回值和每个函数参数的数据类型。 在 Python 中, 永远也不需要明确指定任何东西的数据类型。Python 会根据赋给它的值在内部将其数据类型记录下来。
2.1. Python 和其他编程语言数据类型的比较
一位博学的读者发给我 Python 如何与其它编程语言的比较的解释:
静态类型定义语言
一种在编译期间数据类型固定的语言。大多数静态类型定义语言是通过要求在使用所有变量之前声明它们的数据类型来保证这一点的。 Java 和 C 是静态类型定义语言。
动态类型定义语言
一种在运行期间才去确定数据类型的语言, 与静态类型定义相反。 VBScript 和 Python 是动态类型定义的, 因为它们确定一个变量的类型是在您第一次给它赋值的时候。
强类型定义语言
一种总是强制类型定义的语言。 Java 和 Python 是强制类型定义的。您有一个整数, 如果不明确地进行转换 , 不能将把它当成一个字符串。
弱类型定义语言
一种类型可以被忽略的语言, 与强类型定义相反。 VBScript 是弱类型定义的。在 VBScript 中, 您可以将字符串 ‘12’ 和整数 3 进行连接得到字符串’123’, 然后可以把它看成整数 123 , 所有这些都不需要任何的显示转换。
所以说 Python 既是 动态类型定义语言 (因为它不使用显示数据类型声明) , 又是 强类型定义语言 (因为一旦一个变量具有一个数据类型, 它实际上就一直是这个类型了) 。

3. 文档化函数


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

三重引号表示一个多行字符串。在开始与结束引号间的所有东西都被视为单个字符串的一部分, 包括硬回车和其它的引号字符。您可以在任何地方使用它们, 但是您可能会发现它们经常被用于定义 doc string 的情况。
在三重引号中的任何东西都是这个函数的 doc string, 它们用来说明函数可以做什么。 如果存在 doc string, 它必须是一个函数要定义的第一个内容( 也就是说, 在冒号后面的第一个内容 )。 在技术上不要求给出函数的 doc string, 但是您应该这样做。我相信在您上过的每一种编程课上都听到过这一点, 但是 Python 带给您一些额外的动机: doc string 在运行时可作为函数的属性。

4. 万物皆对象


在 Python 中, 函数同其它东西一样也是对象。

>>> import odbchelper                              >>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}>>> print odbchelper.buildConnectionString(params) server=mpilgrim;uid=sa;database=master;pwd=secret>>> print odbchelper.buildConnectionString.__doc__ Build a connection string from a dictionaryReturns string.#第一行将 odbchelper 程序作为模块导入。模块是指:可以交互使用的一个代码段, 或者来自一个大规模的 Python 程序。 (您在 第 4 章 将会看到多模块 Python 程序的许多例子。) 一旦导入了一个模块, 就可以引用它的任何公共的函数、类或属性。模块可以通过这种方法来使用其它模块的功能, 您也可以在 IDE 中这样做。这是一个很重要的概念, 在后面我们将谈得更多。#当使用在被导入模块中定义的函数时, 必须包含模块的名字。所以不能只使用 buildConnectionString, 而应该使用 odbchelper.buildConnectionString。 如果您用过 Java 的类, 对此应该不感到陌生。#访问函数的 __doc__ 属性不像您想象的那样是通过函数调用。

4.1. 模块导入的搜索路径

>>> import sys                 >>> sys.path                   ['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2','/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages','/usr/local/lib/python2.2/site-packages/PIL', '/usr/local/lib/python2.2/site-packages/piddle']>>> sys                        <module 'sys' (built-in)>>>> sys.path.append('/my/new/path') #导入 sys 模块, 使得它的所有函数和属性都有效。#sys.path 是一个组成当前搜索路径的目录列表。 (您的输出结果可能有所不同, 这取决于您的操作系统, 正在运行的 Python 版本, 和初始安装的位置。) Python 将搜索这些目录 (按顺序) 来查找一个与您正试着导入的模块名相匹配的 .py 文件。#实际上, 我没说实话。真实情况要比这更复杂, 因为不是所有的模块都保存为 .py 文件。有一些, 像 sys 模块, 是"内置模块", 它们实际上是置于 Python 内部的。内置模块的行为如同一般的模块, 但是它们的 Python 源代码是不可用的, 因为它们不是用 Python 写的! ( sys 模块是用 C 写的。)#在运行时, 通过向 sys.path 追加目录名, 就可以在 Python 的搜索路径中增加新的目录, 然后一旦您试着导入模块, Python 也会在那个目录中进行搜索。这个作用在 Python 运行时一直生效。 

4.2. 何谓对象?
它意味着所有的对象都可以子类化。在 Python 中, 定义是松散的;某些对象既没有属性也没有方法 , 而且不是所有的对象都可以子类化。但是万物皆对象从感性上可以解释为:一切都可以赋值给变量或作为参数传递给函数。
这一点太重要了, 所以我会在刚开始就不止一次地反复强调它, 以免您没注意到:在 Python 中 万物皆对象 。字符串是对象。列表是对象。函数是对象。甚至模块也是对象, 这一点我们很快会看到。

0 0
原创粉丝点击