第三章
函数
3.1 函数
我们已经见过了函数调用的例子:
>>> type("world")
(type ’str’)
函数type,它的作用是显示值和变量的类型。括号内的变量和值是函数的参数。函数返回的结果叫返回值。
我们可以把type的返回值赋值给变量:
>>> name = type("pitianjian")
>>> print name
<type‘str’>
函数id以值或变量为参数,返回值是一整数,它表示值或变量的唯一标识符。
>>> id(123)
11602164
>>> number = 123
>>> id(number)
11602164
>>> number = "123"
>>> id(number)
13087320
每个值或变量都有一个唯一id,id值与变量或值在内存中的位置相关。变量的id也就是它所指向值的id。
3.2 函数定义
到目前为止,我们用的都是Python定义的函数。这些Python内置的函数,其定义部分对我们来说时透明的。因此,我们只关注这些函数的用法,而不必关心函数是如何定义的。
我们也可以创建自己的函数,来执行特定的操作。函数的定义形式如下:
def(arg1, arg2,... argN):
<statements>
函数的名字也必须以字母开头,可以包括下划线“_”,但不能把Python的关键字定义成函数的名字。函数内的语句数量是任意的,每个语句至少有
一个空格的缩进,以表示此语句属于这个函数的。缩进结束的地方,函数自然结束。
下面定义了一个两个数相加的函数:
>>> def add(p1, p2):
print p1, "+", p2, "=", p1+p2
>>> add(1, 2)
1 + 2 = 3
函数的目的是把一些复杂的操作隐藏,来简化程序的结构,使其容易
阅读。函数在调用前,必须先定义。也可以在一个函数内部定义函数,内
部函数只有在外部函数调用时才能够被执行。程序调用函数时,转到函数
内部执行函数内部的语句,函数执行完毕后,返回到它离开程序的地方,
执行程序的下一条语句。
3.3 函数的行参和实参
让我们看下面的例子:
>>> def subtracter(p1, p2):
print p1, "-", p2, "=", p1-p2
>>> var1 = 3.1415
>>> var2 = 4.0987
>>> subtracter(var1, var2)
3.1415 - 4.0987 = -0.9572
在这个例子中,函数subtracter有两个参数:p1和p2。他们是函数的行参。变量var1和var2是函数的实参。实参把它的值传递给行参,行参被函数内
的语句进行各种操作,而实参没有被改变。
函数也可以将表达式当作它的参数:
>>> def display(arg):
print arg
>>> a1 = 4.5
>>> a2 = 3
>>> display(a1 + a2)
7.5
>>> import math
>>> display(math.pi)
3.14159265359
>>> display("I love you." * 2)
I love you.I love you.
3.4 变量的范围
Python有一个主函数:main 。其它的函数都是在这个函数内执行,或者说 main 调用你的程序及程序内的函数。你在任何函数外创造的变量都属于main 。看下面的例子:
>>> def multiply(p1, p2):
print p1, "*", p2, "=", p1*p2
>>> def devide(p3, p4):
print p3, "/", p4, "=", p3/p4
>>> v1 = 2.5
>>> v2 = 5.9
>>> multiply(v1, v2)
2.5 * 5.9 = 14.75
>>> devide(v1, v2)
2.5 / 5.9 = 0.423728813559
在这个例子中,定义了两个函数:multiply和devide。p1和p2是函数multiply的
变量,p3和p4是函数devide的变量。v1和v2是函数 main 的变量。当两个
函数调用完毕后,p1,p2,p3,p4就消失了。变量的范围如图 3.1:
