今天的程我们要给大家讲一讲Python编程中的函数。

我们的程序变得越来越大,越来越复杂。需要一些方法把它们分成比较小的部分,这样在后续理解代码的时候也会比较容易。

在Python编程中,把程序分解成较小的部分,主要有三种方法:函数(function)就像是代码的积木,可以重复地使用;

对象(object)可以把程序中的各个部分描述为自包含的单元;

模块(module)就是包含程序各个部分的单独的文件。

我们从这一节开始,先学习函数的概念

函数 —— 积木

简单地讲,函数就是可以完成某个工作的代码块,这是可以用来构建更大程序的一个小部分。

可以把这个小部分与其他部分放到一起,就像积木搭建房子一样。

创建或者定义函数时要用到Python的关键字:def。然后可以利用函数名来使用。

咱们看一个例子吧☟☟☟☟


在代码的第一行中,我们使用了def关键字定义了一个函数。在函数名称的后边有一对括号,然后是一个冒号“:”

冒号告诉Python接下来是一个代码块,下面就是构成这个函数的代码。

最后一行,则是主程序,是通过函数名和括号来调用这个函数的。

程序就是从这里开始运行,就是这一行让程序开始运行刚才定义的函数中的代码。

主程序调用函数时,就像是这个函数在帮助主程序完成它的任务。

def块中的代码并不是主程序的一部分,所以程序运行时,他会跳过这一部分,从def块下方的第一行开始执行。

调用函数

调用函数是指在运行函数里的代码。如果我们定义了一个函数,但是从来也不会调用他们,这些代码就永远也不会运行,大家也就不知道这个函数的存在了!

为了让这个函数发挥余热,我们一般会这么调用函数:使用函数名和一对括号,有的时候这些括号里还会带着一些东西;有时呢,也会什么都不带。

大家可能觉得,我们直接将函数里的内容输出不就好了,为什么还要定义一个函数呢?多麻烦呀!

其实不是这样的,使用函数的主要原因是:一旦定义了函数,就可以通过调用反复地使用,比如说我们需要把刚才的信息打印10遍,只需要调用10次这个函数就可以了;

如果我们只是单纯的输出,那么我们可能需要写30行代码才能实现呢!

那,使用循环不也能实现这个需求吗?

嗯嗯,小朋友们说的很有道理,对于咱们目前的例子来说是可以的;但是如果是没有规律的代码块,我们就不能通过循环完成了,循环是实现不了的。

传递

我们刚才讲过了,有时候呢,我们会在调用函数的时候,在括号里带着一些东西;这个过程叫数传递。

咱们修改一下刚才的例子,让它支持传递


大家可以看到,我们通过括号里边携带的东西,将名字传递给了函数,函数里的代码块在拼接上名字后,将信息打印了出来。

多个

在上边的例子中,我们的函数只有一个数;有的小朋友觉得不能满足自己的需求,问可不可以传递多个参数呀?

这个是可以的,不止Python编程语言支持,几乎所有的编程语言都支持多个数的。

实际上啊,你想传几个数就可以传几个参数,Python并不会阻止你的。木辛博士说

谈到函数传递信息的时候,我们听到一个词:形(parameter)。也有一些人说参数和形参可以互换,所以你可以这么说:

(1)我向这个函数传递了两个形

(2)我向这两个函数传递了

不过呢,有些人认为,谈到传递部分(调用函数)时应当成为实,而提到接收部分(函数内容)时应该称为形参。


嗯嗯,这样呢,我们就实现了传递多个数的需求,小朋友们也可以仿照这个方法扩展到很多很多参数。

虽然Python并没有限制咱们传入数的个数,但是我们还是需要控制一下哈,不要传递太多的参数。

多少算太多

一般情况下,数个数控制在5到6个以下为宜;如果超过了这个数目,咱们就需要考虑一下使用其他的方法实现了。

比较可行的是把所有数放到一个列表中,然后把这个列表传递给函数。这样一来,咱们就可以只传递一个参数了。

函数是可以有返回值的

咱们刚才忙活了好半天,调用函数做了很多事情。但是呢,这个函数一直都默不作声,我们心里没底,这次调用到底是成功了还是失败了呀?

这可怎么办呢?

其实啊,函数有一个非常有用的功能,他们是可以返回信息给调用者的。

我们发送给函数的信息叫做数,函数返回给我们的称为结果或者叫返回值(return value)。

如果想让函数给我们返回信息,需要在函数中使用关键字:return

我们用一个例子来演示一下吧


大家请看,我们通过result获取到了函数print_msg的返回,使用print函数将他打印出来,就可以看到这个确实是函数返回的信息。

太棒了!咱们又掌握了一些新知识。

小朋友们是不是觉得编程越来越有意思了呀?

想不想再继续学一些更新的知识呢?

好的!我们接下来讲一下在函数里变量的作用域知识吧

变量的作用域

通过今天的学习,我们接触了一些例子。小朋友们有没有注意到:有些变量在函数之外,比如result 还有一些变量在函数内部,比如your_name。这些变量有什么意义呢?

先说一下:局部变量吧

看字面意思,局部变量就是放到某一个小空间内的变量,在他的外部大空间是不可见的。

在Python里,也差不多是这么描述的。

Python在函数运行时会创建这个变量,当函数执行完成后,则会把它们全都删除。

也就是说,当所在的函数执行完毕之后,这些变量就烟消云散不知所踪了。其他任何人想调用它们都是不可能的了。

所以,在程序中使用变量的部分被称为这个变量的作用域(scope)。即,只有在这个区域的有效时间内调用才可以,其他区域的都是被禁止的!

有局部必然有全局

如果我们想让一个变量即能在外部使用,也能在内部使用,这样能实现吗?

这样是可以的。

这种变量成为全局变量,我们只需要在外部声明一个变量就可以,这样在外部和内部都可以使用


当然了,这种形式的全局变量,在函数内部是不能被修改的,我们如果想在函数内将外部的变量做修改,需要使用Python的另一个关键字:global。


就像这样,在函数的内部,使用这个全局变量之前将他声明为global的,之后在外部调用的时候就显示修改后的内容了。

好了,今天的程就到这里吧~

小朋友们,咱们今天学到了什么呢?

总结一下:什么是函数

什么是

如何向函数传递

函数如何向调用者返回值

变量的作用域