python的基础知识梳理——函数的介绍和应用以及递归函数的使用

目录

一、函数是什么

二、函数的分类:

(1)内置函数

(2)标准库函数

(3)第三方库函数

(4)用户自定义函数

三、函数的创建

四、函数的返回值

五、函数的参数定义

(1)第一种按顺序

(2) 第二种,第一个用实参,第二个用默认值

六、函数的个数可变的位置参数

(1)个数可变的位置参数

(2)个数可变的关键字参数 

七、函数变量作用的作用域

 八、递归函数

(2)斐波那契实例


一、函数是什么

  1. 一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。
  2. 函数是代码复用的通用机制。

二、函数的分类:

(1)内置函数

    我们前面使用的str()、list()、len()等这些都是内置函数,我们可以拿来直接使用。

(2)标准库函数

    我们可以通过import语句导入库,然后使用其中定义的函数

(3)第三方库函数

    Python社区也提供了很多高质量的库。下载安装这些库后,也是通过import语句导入,然后可以使用这些第三方库的函数

(4)用户自定义函数

      用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数。



三、函数的创建

定义函数的语法如下:

def  函数名 ([参数列表]) :

函数体

[return   xx]

要点:

  1. 我们使用def来定义函数,然后就是一个空格和函数名称;

             Python执行def时,会创建一个函数对象,并绑定到函数名变量上。

  1. 参数列表
    1. 圆括号内是形式参数列表,有多个参数则使用逗号隔开
    2. 形式参数不需要声明类型,也不需要指定函数返回值类型
    3. 无参数,也必须保留空的圆括号
    4. 实参列表必须与形参列表一一对应
  2. return返回值
    1. 如果函数体中包含return语句,则结束函数执行并返回值;
    2. 如果函数体中不包含return语句,则返回None值。
  3. 调用函数之前,必须要先定义函数,即先调用def创建函数对象
    1. 内置函数对象会自动创建
    2. 标准库和第三方库函数,通过import导入模块时,会执行模块中的def语句


四、函数的返回值

return返回值要点:

  1. 如果函数体中包含return语句,则结束函数执行并返回值;
  2. 如果函数体中不包含return语句,则返回None值。
  3. 要返回多个返回值,使用列表、元组、字典、集合将多个值“存起来”即可。

主要写一下第三点

看代码:

def fun (num):     #定义的函数
    odd=[]                 #储存奇数
    even=[]                #储存偶数
    for i in num:            #历遍num这个列表
        if i % 2:               #判断这个数是否是奇数
            odd.append(i)
        else:
            even.append(i)
    return odd,even               #返回的值是这俩个列表
print(fun([25,215,486,159,19964516,496,156,56464,468864,]))

看图:

 看到最后输出的结果,可以看到,结果返回的是俩个值,返回的是元组。


 


五、函数的参数定义

函数的参数定义有俩种,一种是按顺序由实参到形参,另外一种第一个用实参,第二个用默认值

(1)第一种按顺序

def fun(a=10,b=20):
    print(a,b)
print(fun(100,200))

结果:

(2) 第二种,第一个用实参,第二个用默认值

def fun(a=10,b=20):
    print(a,b)
print(fun(100))

结果为:

 可以看到,实参没有传入b的值,那么b用的是形参的值。

六、函数的个数可变的位置参数

(1)个数可变的位置参数

  • 定义函数,无法确定先传递的位置实参的个数时,使用可变的位置存数
  • 使用 * 定义个数可变的位置参数
  • 结果为元组

代码为:

def fun(*args):
    print(args)
fun(10)
fun(10,20,30)

结果为:

(2)个数可变的关键字参数 

  • 定义函数,无法确定先传递的关键字位置实参的个数时,使用可变的关键字参数
  • 使用 * *定义个数可变的关键字参数
  • 结果为字典

代码:

def fun(**args):
    print(args)
fun(a=10)
fun(a=10,b=20,c=30)

结果为:

 这俩个是不一样的,大家使用的时候要多注意!!

七、函数变量作用的作用域

全局变量:

  1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。
  2. 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
  3. 全局变量一般做常量使用。
  4. 函数内要改变全局变量的值,使用global声明一下

局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。

在特别强调效率的地方或者循环次数较多的地方,可以通过将全局变量转为局部变量提高运行速度。

全局变量是要覆盖局部变量的,下面展示的全局变量

x=100
y=0
def fun (x,y):
    x=100
    print(x)
    y=x+y
    return x,y
print(x)
print(y)

结果:展现的是全局变量 

 下面开一下,展现的局部变量:

局部变量:

  1. 在函数体中(包含形式参数)声明的变量。
  2. 局部变量的引用比全局变量快,优先考虑使用。
  3. 如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量

代码:

x=100
y=200
def fun (x,y):
    x=100
    print(x)
    y=x+y
    return x,y
print(fun(100,200))

下面展现的就是局部变量:

 八、递归函数

递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。递归类似于大家中学数学学习过的“数学归纳法”。 每个递归函数必须包含两个部分:

  1. 终止条件
           表示递归什么时候结束。一般用于返回值,不再调用自己。
  2. 递归步骤
           把第n步的值和第n-1步相关联。

递归函数由于会创建大量的函数对象、过量的消耗内存和运算能力。在处理大量数据时,谨慎使用。

具体的使用就是计算阶乘

代码:

def fac(x):
    if x== 1:
        return 1
    else:
        return x*fac(x-1)
print(fac(5))

这儿的算法就是

 思想:

 递归他是一层一层的去计算,比如5!=5*4*3*2*1

那么就会有5*fac(4),在这儿不知道fac(4)是多少,那就计算5*4*fac(3)

但是这儿也不知道fac(3)是多少,那就接着计算5*4*3fac(2),但是这儿也不知道fac(2)是多少

就计算fac(1),而1的话本身就是一,那么就是5*4*3*2*fac(1),最后fac(1)是1,则又一层一层的返回,最后便是5*4*3*2*1

(2)斐波那契实例

 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

这个我们要怎么写呢

首先的是他肯定是递归,先定义一个函数

然后可以发现,前俩项是,1 ,1

那么后面的就是前俩项相加之和

这样就好写多了

看代码:

#斐波纳妾
for i in range(1,10):        #这是用数列的方法写出n取不同的值时,斐波那契数列的不同值
    n=i

    def naqie(n):
        if n==1:             #定义第一项
            return 1
        if n==2:             #定义第二项
            return 1
        else:                  #最后返回的值是用递归,后一项加前一项的和
            return naqie(n-1)+naqie(n-2)
    print(naqie(n))

代码结果如下:

 



原创不易,各位读者大大,动动发财的小手,点点赞!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学python的小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值