首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

1Python函数及对象

2012-12-22 
一Python函数及对象其他书籍都是如何一步步从基础到构建完整可运行的程序的,但我们跳过这个部分!一个完整

一Python函数及对象

其他书籍都是如何一步步从基础到构建完整可运行的程序的,但我们跳过这个部分!

一个完整的、可执行的Python程序

?

#-------------------------------------------# Name:        odbchelper# Purpose:#         odbc帮助类# Author:      zdk## Created:     02/11/2012# Copyright:   (c) zdk 2012# Licence:     <your licence>#-------------------------------------------def buildConnectionString(params):    """build a connection string from dictionary of parameters.    return 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))

?odbchelper.py输出的结果为:pwd=secret;database=master;uid=sa;server=mpilgrim

?

1. 函数声明

? ? 和大多数语言一样python有函数,在需要时,像下面这样声明即可:

?

def buildConnectionString(params):

?

? ? 首先,函数声明以关键字 def 开始,接着为函数名,再往后是放在小括号里的参数。如果是多个参数可以用逗号隔开。

? ? 其次函数没有定义返回类型,Python不需要指定返回类型,实际上每一个函数都有返回值,默认为None(python的空值)

2. 文档化函数

? ? 可以通过给出一个doc string(文档字符串)来文档化一个python函数。

?

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

?

? ?三重引号表示一个多行字符串,你可以在任何地方使用它们,但你会发现,它们经常被用于定义doc string。

? ?在三重引号中的任何东西都是这个函数的doc string,它们用来说明函数可以做什么,如果存在doc string,它必须是一个函数定义的第一个内容(也就是说,在冒号后面的第一个内容)。在技术上不要求给出函数的doc string,但是你应该这样做,不光是为了解释,python还会有一些额外的动机:doc string在运行时可以作为函数的属性。

3.万物皆对象

? ?上面说doc string可以作为函数的属性,并且运行时可用,在python中函数同其他东西一样也是对象。

?

#-------------------------------------------# Name:        testOdbchelper# Purpose:## Author:      zdk## Created:     02/11/2012# Copyright:   (c) zdk 2012# Licence:     <your licence>#-------------------------------------------import odbchelperif __name__ == '__main__':    myParams = {"server":"mpilgrim1",\            "database":"master1",\            "uid":"sa1",\            "pwd":"secret1"\            }    print (odbchelper.buildConnectionString(myParams))    print (odbchelper.buildConnectionString.__doc__)

?

?结果为:

?

pwd=secret1;database=master1;uid=sa1;server=mpilgrim1

build a connection string from dictionary of parameters.

? ? return string.

? ? 第11行将odbchelper程序作为模块导入,这样就可以使用它的公开的函数、类和属性。? ? 使用导入模块的函数、类和属性时必须加上模块名,即odbchelper.buildConnectionString。? ? __doc__是属性,不是函数。

?

? ? 3.1 模块导入的搜索路径

当导入一个模块时,Python在几个地方进行搜索,明确地,它会对定义在sys.path中的目录逐个进行搜索。

? ? sys.path是一个list(列表),你可以很容易的查看它或通过标准的list方法来修改它。

import sysif __name__ == '__main__':    print(sys.path)
? ? 结果为:['E:\\daokun\\python\\python之旅', 'D:\\Program Files (x86)\\PyScripter\\Lib\\rpyc.zip', 'C:\\Windows\\system32\\python32.zip', 'D:\\Python32\\DLLs', 'D:\\Python32\\lib', 'D:\\Python32', 'D:\\Python32\\lib\\site-packages']?

? ?默认的会把当前模块的路径加入到了sys.path中

?

? ? 3.2 何为对象

? ??在python中万物皆对象从感性上可以解释为:一切都可以赋值给变量或作为参数传递给函数。

?

4.代码缩进

?

#-------------------------------------------# Name:        fib# Purpose:## Author:      zdk## Created:     02/11/2012# Copyright:   (c) zdk 2012# Licence:     <your licence>#-------------------------------------------def fib(n):    print ('n =', n)    if n > 1:        return n * fib(n - 1)    else:        print ('end of the line')        return 1if __name__ == '__main__':    print(fib(5))

?

? ? Note: Python vs. Java: 语句和块分割

? ? Python 使用硬回车来分割语句,冒号和缩进来分割代码块。 ?C++ 和 Java 使分号来分割语句,花括来分割代码块。

?

5.测试模块

if __name__ == '__main__':

? ? 模块是对象,并且所有的模块都有一个内置属性__name__。一个模块的__name__的值取决于您如何使用模块。如果是import模块,那么__name__的通常为模块的文件名;如果像标准程序一样直接运行模块,那么__name__的值为__main__。只要了解到这一点,你就可以在模块内部设计一个测试套件,在其中加入这个if语句。当直接运行模块时,__name__的值是__main__,所以测试套件执行。当你导入模块时,__name__是别的东西,所以测试套件被忽略。

?

?

热点排行