1.2. 声明函数

象大多数其它语言,Python拥有函数。但是它没有分离的头文件,如C++;或分离的接口声明和实现声明,如Pascal。一旦需要一个函数,声明它,编码就行了。

例 1.3. 声明 buildConnectionString 函数


def buildConnectionString(params):

有几件事情需要注意的。首先,函数声明以关键字 def 开始,后面跟着函数名,再后面为小括号,里面为参数。多个参数之间(这里没有显示)以逗号分隔。

其次,函数没有定义返回的数据类型。Python函数不需要提定返回值的数据类型;甚至不需要指定是否会返回一个值。实际上,每个Python函数都返回一个值;如果函数曾经执行了一个 return 语句,它将返回指定的值,其它情况下返回 None(Python的空值)。

Note

在VB中,函数(有返回值)以 function 开始,子程序(无返回值)以 sub 开始。在Python中没有子程序。都是函数,所有的函数都返回一个值(至少为 None),并且所有的函数都以 def 开始。

第三,参数 params 并不需要指明数据类型。在Python中,变量不需要被明确指出类型。Python会找到变量是什么类型,并在内部将其记录下来。

Note

在Java,C++,和其它静态类型定义语言中,必须要指明函数返回值和每个函数参数的数据类型。在Python中,永远也不需要指明任何东西的数据类型。根据所赋予的值,Python会在内部将其数据类型记录下来。

附录。一位博学的读者发给我Python与其它语言的比较:

静态类型定义语言
一种在编译时,数据类型是固定的语言。大多数静态类型定义语言强制这一点,它要求你在使用所有变量之前要声明它们的数据类型。Java和C是静态类型定义语言。
动态类型定义语言
一种在执行期间才去发现数据类型的语言,与静态类型定义相反。VBScript和Python是动态类型定义的,因为它们是在第一次给一个变量赋值的时候找出它的类型的。
强类型定义语言
一种总是强制类型定义的语言。Java和Python是强制类型定义的。如果你有一个整数,如果不显示地进行转换,你不能将其视为一个字符串(在本章后面会有更多如何去做的内容)。
弱类型定义语言
一种类型可以被忽略的语言,与强类型定义相反。VBScript是弱类型定义的。在VBScript中,可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',然后可以把它看成整数 123,而不需要显示转换。

所以Python即是动态类型定义(因为它不使用显示数据类型声明),又是强类型定义(因为一旦一个变量具有一个数据类型,它实际上就一直是这个类型了)。