去年夏天开始接触Python,刚开始觉得这个语言相当简洁精练,断断续续的学了一些基础知识,打算今年好好地系统学一下。先把以前看深入Python时做的笔记整理一下,以免像以前那样学了后面的就忘了前面的基础知识。
第一个Python示例小程序:
def buildConnectionString(params):
"""Build a connection string from a dictionary
Returns string.
"""
return ";".join(["%s=%s" %(k,v) for k, v in params.items()])
if __name__ == "__main__":
myParams = {"server":"temp",\
"database":"db_temp",\
"uid":"sa",\
"pwd":"dont know"}
print buildConnectionString(myParams)
运行结果:
>>>
pwd=secret;database=master;uid=sa;server=mpilgrim
函数声明
首先,函数声明以关键字def开始,接着为函数名,然后为参数,参数放在小括号里,多个参数之间用逗号分隔。
其次,函数没有定义返回的数据类型,Python不需要指定返回值的数据类型;甚至不需要指定是由有返回值。实际上,每个Python函数都返回一个值,如果函数执行过return语句,它将返回指定的值,否则将返回None空值。在Python中参数不需要指定数据类型,Python会判定一个变量是什么类型,并在内部将其记录下来。
文档化函数
可以通过给出一个 doc string (文档说明的字符串) 来文档化一个 Python 函数。定义 buildConnectionString 函数的 doc string
def buildConnectionString(params):
"""Build a connection string from a dictionary of parameters.
Returns string."""
三重引号表示一个多行字符串。在开始与结束引号间的所有东西都被视为单个字符串的一部分,包括硬回车和其它的引号字符。您可以在任何地方使用它们,但是您可能会发现,它们经常被用于定义 doc string。
在三重引号中的任何东西都是这个函数的 doc string,它们用来说明函数可以做什么。如果存在 doc string,它必须是一个函数要定义的第一个内容 (也就是说,在冒号后面的第一个内容)。在技术上不要求给出函数的 doc string,但应该尽可能为每个函数都添加doc string,它 在运行时可作为函数的属性。
万物皆对象
在Python中,函数同其它东西一样也是对象(刚开始觉得很新奇)。
>>> import odbchelper (1)
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> print odbchelper.buildConnectionString(params) (2)
server=mpilgrim;uid=sa;database=master;pwd=secret
>>> print odbchelper.buildConnectionString.__doc__ (3)
Build a connection string from a dictionary
Returns string.
(1)第一行将 odbchelper 程序作为模块导入。模块是指一个可以交互使用,或者从另一 Python 程序访问的代码段。 只要导入了一个模块,就可以引用它的任何公共的函数、类或属性。模块可以通过这种方法来使用其它模块的功能。
(2)当使用在被导入模块中定义的函数时,必须包含模块的名字。所以不能只使用 buildConnectionString,而应该使用 odbchelper.buildConnectionString。
(3)访问函数的 __doc__ 属性并不是通过函数调用。
代码缩进
Python 函数没有明显的 begin 和 end,没有标明函数的开始和结束的花括号。唯一的分隔符是一个冒号 (:),接着代码本身是缩进的。
代码块是通过它们的缩进来定义的。这里所说的“代码块”是指:函数、if 语句、for 循环、while 循环,等等。开始缩进表示块的开始,取消缩进表示块的结束。不存在明显的括号,大括号或关键字。
测试模块
所有的 Python 模块都是对象,并且有几个有用的属性。可以使用这些属性方便地测试你所编写的模块。下面是一个使用 if __name__ 的技巧。
if __name__ == "__main__":
首先,if 表达式无需使用圆括号括起来。其次,if 语句以冒号结束,紧跟其后的是缩进代码。
模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于你如何应用模块。如果 import 模块,那么 __name__ 的值通常为模块的文件名,不带路径或者文件扩展名。但是你也可以像一个标准的程序一样直接运行模块,在这种情况下 __name__ 的值将是一个特别的缺省值,__main__,这样你可以很方便地测试单个模块。