今天的课程我们要给大家讲一讲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的,之后在外部调用的时候就显示修改后的内容了。
好了,今天的课程就到这里吧~
小朋友们,咱们今天学到了什么呢?
总结一下:什么是函数
什么是参数
如何向函数传递参数
函数如何向调用者返回值
变量的作用域