Function 函数

Function 函数

作者: 莫烦 编辑: 莫烦 发布于: 2021-05-01

程序编写中,我常会重复写一些功能,比如查询文件时间,查询文件名字等等, 如果每次做这些操作的时候,我都需要重新写一遍这些基础功能,岂不是十分费力? 有没有办法将这些基础功能复用起来,后续我只需要引用到这个功能,多省事。 好在Python中就有这样的做事方式。

定义函数

定义一个可以被复用的函数是第一步,想象我没有函数的时候,对多个文件名进行一种规则性修改的时候, 我可能这样做。

要修改的文件少还好,我写两行就搞定,万一这种操作变多,我得写到什么时候? 要不我就定义一个功能帮我减轻负担吧。

在这个里面,我们还运用到了函数的输入参数,其实一个函数也可以没有输入参数的,比如:

如果像上面这样的功能,我们还想拿出来函数处理的结果,其实也就是让函数可以 return 出来一个值。

参数设置

其实在数学运算中,函数的概念还是很常见的,比如你想得到一个一元二次方程的值,传入x得到y。 你可以留意下我下面的传参过程,你在参数多的时候最好把参数名也写上,避免自己搞混了。

另外,有些函数的参数并不是一直变化的,我们还可以设置一个参数默认值,节省写代码的时间和代码量。 如果设置了这些默认值,那在调用函数的时候就不一定要给这个参数赋值了。 如果没有设置默认值,每个参数都要传入才能成功调用,不信你试试。

全局和局部变量

说到了函数这一节了,有个东西不得不提一下,就是全局变量和局部变量的概念。 不仅仅是函数中会使用到这个概念,在后面介绍 类 class 的时候, 全局变量和局部变量也是一样的使用逻辑。

变量 特点
全局 global 函数里外都能用 (公用)
局部 local 仅在函数内有用 (私有)

我们举个例子, 下面这种方式是会报错的。原因很简单,在函数里的 filenamemodify_name() 自己的变量, modify_name() 这个函数比较抠门,他不愿意借给大家公用这个 filename 变量。所以在外面,我们是找不到 filename 的, 你只能在 modify_name() 自己家里 使用这个 局部变量

那么如果这个 filename 是公用的,每一个函数都能获取到的,我们怎么定义呢? 其实你就把 filename 拎出来,放到外面就好了。

对于上面的代码,你尝试一下,在 modify_name() 里面去修改一下 filename 的值,重新赋值一下 filename 看看会发生什么?

为什么我在 modify_name() 里面修改了 filename,而且在里面打印出来时,它的确也被修改了, 但是在外面打印 filename 的时候却没有变化?哈哈,因为自私的 modify_name() 想自己在内部搞一套标准, 你外面有啥不要紧,如果我自己也搞一个一样的东西,那我就觉得自己这个更重要,就不看外面的东西了。所以local的filename就是 modify_name() 自己那一套。

在反过来看外面的 filename,公用的 filename 也并不在乎你小灶里头在搞什么奇怪的操作,我只要保证我给大家提供的公用值都还是公用就好了。 所以在 global 的 filename 没有被 local 的改变。

不过我们还存在另一种情况,就是允许内部来修改外部的值。为了办这件事,modify_name() 必须先向外面打一个申请报告,向外面申请自己要去修改公用的 filename。 怎么打申请呢?就是用到了下面这种方式:

globallocal 在Python中也有一些比较有趣的使用方法,不过在初学阶段, 并不一定有太多用,你们留一个印象,以后在纠结globallocal的时候再搜就好了。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 【支持莫烦】 能让我感到认同,我也更有理由坚持下去。

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat