【Python】函数
做一个简要介绍
本周重点讲解函数和代码复用
主要包含五个部分
1,函数的定义与使用
2,实例,七段数码管绘制
3,代码复用与函数递归
4,讲解一个模块:Pyinstaller库的使用(重要)
5,实例8,科赫雪花小包裹
函数的理解和定义
在天天向上的例子中,我们就说过函数
函数是一段代码的表示
函数是一段具有特定功能,可重用的语句组
函数是一种功能的抽象
两个作用
1、降低编程的难度和代码复用
2、函数的定义比较简单
我们使用保留字def
def <函数名>(<参数(0个或多个)>): <函数体> return <返回值>
看例子 计算n!
fact是函数名,n是fact的参数,可以往上看
return s s是返回值
函数在定义时,所指定的参数是占位符。
函数定义以后,如果不经调用,不会被执行。
从例外一个角度理解:
函数定义时,参数是输入,函数体是处理,结果是输出,函数就是IPO的实现,函数也是完整代码的封装。
函数的使用及调用过程
调用时运行函数代码的方式,程序看到这段代码并不会去执行,所谓调用,就是函数名称给定一个具体的值,比如 fact(10);
调用时要给出实际的参数,实际的参数替换定义中的占位参数,函数调用后得到返回值。
下面看代码的调用过程
a=fact(10) print(a)
当这段代码被执行时,代码会去寻找fact函数,并且将给定的参数10 赋给你使用的函数中间的那个参数n。此时,10就代替了n,运算代码之后,产生了确定的s值 3628800,并且赋值给变量a。print (a)之后,就输出了3628800。
所以这就是函数的调用过程。
函数的参数传递
函数可以有参数,也可以没有,但必须保留括号
def <函数名>(): <函数体> return <返回值>
此外呢,我们也可以为某些参数制定一些默认值,构成可选参数。
def <函数名>(<非可选参数>,<可选参数>): <函数体> return <返回值>
所谓可选参数,就是我们调用的时候不提供,或者提供其他变量。这种可以提供,也可以不提供的参数叫可选参数。所有可选参数放在非可选参数之后。
看例子
你可以看出m既可以给定,也可以不给定,结果跟m有关。此外呢,还有一种参数叫可变参数,不确定多少个
def <函数名> (<参数> , *b): <函数体> return <返回值>
看例子
*b代表不确定b中有多少参数,有可能是 3 也有可能是3,5,8,前面的10 是确定参数。比如之前学过的max min 都是不确定多少个参数函数调用时,参数可以按照位置或名称的方式传递。
可以按照n 和m 的位置传递
也可以按照n 和m 的名称传递
函数的返回值
函数可以返回0 或者返回多个结果;可以有返回值,也可以没有;return可以传递0个返回值,也可以传递多个返回值。
看例子:
看return 后面(725760,10,5)这种用小括号,中间用逗号,叫元组数据类型。我们之前学过列表,很相似,不做展开。
局部变量与全局变量
在程序中使用叫全局变量,在函数体中使用的叫局部变量。
<语句块1>
def <函数名> (<参数> ): <函数体> return <返回值>
<语句块2>
看代码:
def里面的n和s是局部变量,外面的是全局变量n和s。局部变量是函数内部的占位符,与全局变量可能重名但不同。函数运算结束后,局部变量被释放。
看上例子,fact()函数中s是局部变量与全局变量s不同,在return s 时 ,返回的是全局变量s=100的值,并不是局部变量s=3628800
在print(s),输出的是全局变量。
我们能在程序中间使用外部的全局变量吗?
当然可以,可以用 global 保留字在函数内部使用全局变量。
看结果就能对比出来,局部变量为组合数据类型且未创建,等同于全局变量。
通过[]创建一个全局变量列表ls,def 中的ls是列表类型,未真实创建则等同于全局变量。在func中,全局变量ls被修改。
再看代码:
两个例子中 ,在def中多了一个真实创建的ls[],这时ls是局部变量,局部变量ls被修改。
这段代码告诉我们,如果一个组合数据类型在函数中被真实创建了,那么他就是局部变量。在函数运行结束后,变量就会被释放,他就不存在了。如果组合数据类型没被创建,又与全局变量名称相同,所以就是全局变量。
lambda函数
lambda函数是一种匿名函数,既没有名字的函数。使用lambda保留字来定义,函数名是返回结果。lambda函数用于定义简单的,能够在一行内表示的函数。
<函数名>=lambda<参数>:<表达式>
等价于
def <函数名> (<参数> ): <函数体> return <返回值>
看例子:
>>>f=lambda x,y :x+y
f(10,15)=25
>>>f=lambda:”lambda函数” print(f())
lambda 函数
谨慎使用lambda函数,尽量用def return 去定义。它的存在主要用于一些特定的函数或方法的参数。lambda有固定的使用方式,慢慢学 。