5.4 函数的深入学习
之前我们已经调用过很多次函数了,大家对函数是既熟悉又陌生,我想很多朋友对函数都有一种朦朦胧胧的感觉,现在是时候单独谈一谈函数了,我相信大家学完这一章,肯定会有一种豁然开朗的感觉,加油吧!
完整的函数是由函数名、参数列表以及函数体组成,在函数中,4个空格缩进表示该语句属于函数体,如果函数有返回值,那么就需要在函数中使用return
关键字返回结果。这其中,函数的参数和返回值并不是必须的。
例:
def hello():
print("hello,world!")
hello()
传参并返回
# 定义add函数,有两个参数x、y
def add(x,y):
#返回x与y的和
return x + y
result = add(2,4)
print(result)
给参数默认值
定义函数时,可以为参数预先设置一个默认值,当函数被调用时,可以不需向括号中传入参数,函数体中则会使用这个默认的值,如果调用时传入参数,函数体中就会使用这个传入的值
# 参数默认值为2
def sub(x = 2):
return x + 2
# 向sub函数中传入参数3
print(sub(3))
# 不向sub函数传参
print(sub())
5.4.1 函数的传参方式
除了按照函数参数定义的顺序,一一对应的传入参数,Python还有另一种传参方式,按照参数名传参。
# 声明一个求三个数和的函数
def sub(x,y,z):
return x + y + z
# 按顺序传参
result = sub(4,7,11)
print(result)
# 按参数名传参
result = sub(z=11,y=7,x=4)
print(result)
# 混合方式传参
result = sub(4,z=11,y=7)
print(result)
混合方式传参特别需要注意一点,按顺序的传参必须放在按参数名传参之前,如上例,4位于z=11,y=7之前
,而不能写成sub(z=11,y=7,4)
,否则会造成混乱,程序会报错
5.4.2 变量的作用域
所谓作用域,就是起作用的范围。在不同的作用域内,变量是可以同名的。在Python中,作用域分为三个,全局作用域
,局部作用域
和内置作用域
全局作用域是指整个脚本文件内的范围中可用;局部作用域指某个函数范围内可用,超出这个函数的范围无效了。内置作用域是Python预先定义的,暂不讨论。
此外,全局变量不一定只能在函数的外部定义,函数内部也可以定义一个全局变量,定义之后,整个脚本文件内都可访问。在函数内定义全局变量,需要使用关键字global
声明,特别要注意的一点,在函数内定义全局变量,必须先运行此函数之后,该全局变量才会生成,脚本文件的其他地方才能访问和使用。
5.5 用模块封装函数
Python中的模块实际上是指包含函数或者是一些类的源码文件。模块的一个好处是可重用。将代码写到模块中保存起来,我们可以下次继续使用,与此同时,我们还能将模块发给其他人使用。
简单讲,一个.py
格式的文件就是一个模块。
5.5.1 自定义模块
-
创建模块
新建一个Python脚本。即新建一个.py的文件,如下,我这里命名my_module.py
-
编写代码
在模块中编写如下代码def show(): print("我是my_module中的show函数") def sayHello(name): print("hello,",name)
-
引入模块
在同一个文件夹下新建一个调用模块,即用来运行的模块,命名为run.py
# 引入my_module模块,注意,引入时只写模块名,不带.py后缀 import my_module # 通过模块名调用模块中的一个函数 my_module.show() my_module.sayHello("Bob")
如上,这是一个完整的过程,演示了如何编写并使用模块。有了模块之后,我们所有的代码就不必要都写在同一个文件中,可以分多个脚本文件。这样的好处是显而易见的,一方面我们将编写好的函数封装到模块中,供其他人使用,另一方面我们也更容易梳理清晰逻辑,当代码成千上万行之后,不同的脚本对应不同的功能,有相关问题,只需要去对应的脚本中检查。
其实在生活中,这种模块化的思维也很常见,比如电脑的硬盘坏了,我们只需要买一个新的硬盘,然后把旧硬盘拔了,插上新的即可。硬盘与电脑主板之间只有一个插头连接,而不是一堆导线焊接,普通人就可以更换。我们的模块化编程也是一样的,如果某个模块有问题,我们可以去单独修改该模块,或者写一个新的模块,然后把旧模块去除,将新模块导入。
最后需要注意一点,Python已为我们提供了很多内置的模块,例如math、random等等,这些内置模块,我们直接import就能使用,Python已经为我们放好了地方,而我们自己的模块如果没有放对地方,import
就会报错,因为Python并不知道我们自己写的模块放哪里了,他找不到。所以,在使用自己所编写的模块时,要注意把被调用的模块和用来调用的模块放在同一个文件夹。
请关注公众号:编程之路从0到1
关注公众号即可获取网盘资源!
配合本教程,还有视频讲解哦,不容错过