当前页面: 首页> 资讯百科

Python培训教程:函数

2020-06-04 17:27:26

我们经常需要在同一程序里多次复用代码。函数可以很好的帮助我们完成这一点。我们在函数里写我们要重复做的事,然后我们在任何需要的时候调用它。我们已经看到一些内建的函数,比如len(),divmod()。

一、定义一个函数

我们使用关键词def来定义一个函数,语法描述如下所示:

让我们编写一个函数,它将接受两个整数作为输入,然后返回总和。

第二行有个return关键字,我们把 a + b 的值返回给调用者。

你必须像下面这样调用这个函数。

还记得我们上节Python培训教程讲过的回文检查程序么?让我们编写一个函数来检查给出的字符串是否为回文,然后返回True 或者 Flase。

将上述代码写入到testpalindrome.py文件,执行如下:

二、局域或全局变量

我们通过几个例子来明白局域或全局变量,首先我们在函数内部和函数调用的代码中都使用一个变量a,讲代码写入local.py

运行程序:

首先我们对a赋值9,然后调用更改函数,这个函数里我们对a赋值90,然后打印a的值。调用函数后我们再次打印a的值。

当我们在函数里写a = 90时候,它实际创建了一个新的名为a的局部变量,这个变量只是在函数里可用,并且会在函数完成时销毁。所以即使这两个变量名字都相同,但实际上他们并非同一变量。

那如果我们先定义a,在函数中是否可以直接使用呢?

这段代码没什么问题,可以直接打印输出9。稍微改动一下:

这时候就会报错了:"UnboundLocalError:local variable 'a' referenced before assignment",原因是当函数中只要用到了变量a,并且a出现在表达式等于号的前面,就会被当作局部变量。当执行到print(a)的时候会报错,因为a作为函数局部变量是在print(a)之后才定义的。

现在我们使用global关键词,对函数中的a标志位全局变量,让函数内部使用全局变量的a,那么整个程序中出现的a都将是这个:

程序中的end = ' '参数表示,print打印后的结尾不用换行,而用空格。默认情况下print打印后会在结尾换行。

程序执行的结果,不会报错了,因为函数体内可以完全访问全局的变量a:

在函数内使用global会有什么作用呢?尝试下面代码:

程序执行的结果:

这里通过关键字global来告诉a的定义是全局的,因为在函数内部更改了a的值,函数外a的值也实际上更改了。

三、默认参数值

函数的参数变量可以有默认值,也就说如果我们对指定的参数变量没有给出任何值则会赋其默认值。

在上面的例子里,我们在函数的参数列表写出b = -99。这表示如果调用者未给出 b 的值,那么b的值默认为 -99.这是一个关于默认参数的非常简单的例子。

有两个非常重要的地方,第一个是具有默认值的参数后面不能再有普通参数,比如 f(a, b=90, c)就是错误的。

第二个是默认值只能被赋值一次,因此如果默认值是任何可变对象时会有所不同,比如列表、字典或大多数类的实例。例如,下面的函数在后续调用过程中会积累(前面)传给它的参数: 


要避免这个问题,你可以像下面这样:

四、关键字参数

函数可以通过关键字参数的形式来调用,形如keyword = value 。如下:

在上面例子我们可以看见调用函数时使用了变量名,比如func(12, c=24),这样我们将24赋给c且b默认值。

五、强制关键字参数

我们也能将函数的参数标记为只允许使用关键字参数,用户调用函数时将只能对每一个参数使用相应的关键字参数。

六、文档字符串

在Python里我们使用文档字符串(docstrings)来看看如何使用代码,这在交互模式非常有用,也能用于自动创建文档。下面我们来看看使用文档字符串的例子。

运行程序:

七、高阶函数

高阶函数(Higher-order function)或仿函数(functor)是可以接受函数作为参数的函数:

  • 使用一个或多个函数作为参数

  • 返回另一个函数作为输出

Python里的任何函数都可以作为高阶函数,下面举个简单例子:

map函数

map是一个在Python里非常有用的高阶函数。它接受一个函数和一个序列(迭代器)作为输入,然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果。

八、总结

经过本Python培训教程应当知道如何定义函数,局域变量和全局变量一定要弄清楚,参数默认值、关键字参数也需要掌握。

另外,其它高级语言常见的函数重载,Python是没有的,这是因为Python有默认参数这个功能,函数重载的功能大多可以使用默认参数达到。

在后面我们还介绍了高阶函数的概念并使用了map()函数。在Python中还有其它高阶函数,如sorted()、filter()以及functools模块中的函数,大家可以了解一下。



seo