Function 函数
程序编写中,我常会重复写一些功能,比如查询文件时间,查询文件名字等等, 如果每次做这些操作的时候,我都需要重新写一遍这些基础功能,岂不是十分费力? 有没有办法将这些基础功能复用起来,后续我只需要引用到这个功能,多省事。 好在Python中就有这样的做事方式。
定义函数¶
定义一个可以被复用的函数是第一步,想象我没有函数的时候,对多个文件名进行一种规则性修改的时候, 我可能这样做。
要修改的文件少还好,我写两行就搞定,万一这种操作变多,我得写到什么时候? 要不我就定义一个功能帮我减轻负担吧。
在这个里面,我们还运用到了函数的输入参数,其实一个函数也可以没有输入参数的,比如:
如果像上面这样的功能,我们还想拿出来函数处理的结果,其实也就是让函数可以 return
出来一个值。
参数设置¶
其实在数学运算中,函数的概念还是很常见的,比如你想得到一个一元二次方程的值,传入x
得到y
。 你可以留意下我下面的传参过程,你在参数多的时候最好把参数名也写上,避免自己搞混了。
另外,有些函数的参数并不是一直变化的,我们还可以设置一个参数默认值,节省写代码的时间和代码量。 如果设置了这些默认值,那在调用函数的时候就不一定要给这个参数赋值了。 如果没有设置默认值,每个参数都要传入才能成功调用,不信你试试。
全局和局部变量¶
说到了函数这一节了,有个东西不得不提一下,就是全局变量和局部变量的概念。 不仅仅是函数中会使用到这个概念,在后面介绍 类 class 的时候, 全局变量和局部变量也是一样的使用逻辑。
变量 | 特点 |
---|---|
全局 global | 函数里外都能用 (公用) |
局部 local | 仅在函数内有用 (私有) |
我们举个例子, 下面这种方式是会报错的。原因很简单,在函数里的 filename
是 modify_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
。 怎么打申请呢?就是用到了下面这种方式:
global
和 local
在Python中也有一些比较有趣的使用方法,不过在初学阶段, 并不一定有太多用,你们留一个印象,以后在纠结global
和local
的时候再搜就好了。