我们之前学了一些基础的过程语句,如if else、while、for。随着我们python程序的功能越来越复杂,代码也就越来越长,因此我们就需要用“函数”来简化代码。我们通常把功能单一的、可重复利用的代码写成函数。函数的优点就是定义一次,可多次调用,提高的代码的可复用性、可阅读性、可维护性。
函数的定义用def关键字,一般格式如下:
def name(arg1, arg2, ...argN):
statement
return value
注:
与C++、Perl等语言不同,python里的函数本身也是可执行代码(不是函数声明或者预定义)。python解释器看到def时,先创建一个函数对象,然后把函数名字指向刚创建的函数对象。因此,函数与数字、字符串、列表等一样,也是一种数据类型。
我们来理解python的函数与C++、Perl等语言的另一个区别。上面讲到python解释器遇到def就立即创建对象,所以说python没有预先定义的说法,也就没有compile的说法。因此,python的函数定义可以出现在任意的地方,例如下面的例子也是合法的:
def func_a (): #创建对象func_a
a = 1
def func_b (): #在func_a里面又创建了对象func_b
b = 2
又如:
if a > 10:
def func():
print("great than")
else:
def func():
print("less than")
func() #此处调用的函数是动态的
我们来看一个例子:
def times(x, y):
return x*y
times(2, 4) # = 8
times(3.14,2) # = 6.28
times("-", 20) # = "--------------------"
l = [1, 2]
times(l, 4) #[1, 2, 1, 2, 1, 2, 1, 2]
从这个例子是不是感觉python到与Perl有不一样的地方。参数类型由实际传递的对象类型决定。在python里,对象类型不同,操作符*乘号就做不同的事情。
这其实就是操作符的重载(C++里也是这样叫),实现了多态。
到这里,我们把函数基础概念就讲完了。是不是学得特别累,python的函数竟有这么多不同之处。(我们既然学python,就必须一步一个脚印打好基础!)
我们总结一下要点: