IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器) -> 正文阅读

[数据结构与算法]好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)

递归函数

在定义的函数内,调用该函数

# 斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……,即F(n)=F(n-1)+F(n-2)
# fib(n),其中参数n的含义:斐波那契数的序号(如:n = 1时,返回1;n=3时,返回2)。
def fib(n):
    """
    :type n: int
    :rtype: int
    """
    while (n > 0):
        if (n == 1 or n == 2):
            return 1
        else:
            return fib(n - 1) + fib(n - 2)
    return 0

print(fib(3))
# 实现一个数的阶乘
def jiecheng(n):
    if n == 1:
        return 1
    else:
        return n*jiecheng(n-1)

print(jiecheng(2))

回调函数

函数A中使用函数作为参数,且调用了该函数参数

def love():
     print('123')
     
def func(f): # 使用函数作为参数
    print(f,type(f))
    f() #调用了函数参数

func(love)

闭包函数

函数A中返回值为A中的内函数, 并且该内函数使用了A中局部变量。内函数就是闭包函数

特点

  1. 内函数使用了外函数中定义的局部变量
  2. 外函数返回值为内函数,返回的内函数就是闭包函数
  3. 用于保护外函数中的局部变量,既可以使用,又不会被外界破坏
  4. 使用 函数名.__closure__ 检测是否为闭包函数 如果是闭包函数返回 cell
# 定义一个函数 
def person():
    money = 0  # 外函数中定义局部变量
    # 定义内函数
    def work():
        nonlocal money   # 在内函数中使用了外函数的临时变量
        money += 100
        print(money)
    # 在外函数中返回了内函数,这个内函数就是闭包函数
    return work

res = person() # person()返回值为work 所以res = work
# 此时就不能够在全局中对money这个局部变量进行任何操作了,
# 闭包的作用:保护了函数中的变量不受外部的影响,但是又能够不影响使用

匿名函数 lambda 表达式

使用lambda表达式定义匿名函数
lambda 参数1,参数2… : 返回值

  • lambda表达式不是一个代码块,又称为一行代码的函数
  • lambda表达式只能访问自己的形参

# 普通函数
def jia(x,y):
    return x+y
print(jia(2,3))

# 改成lambda表达式来封装
res = lambda x,y:x+y
print(res(4,4))

# 带有分支结构的lambda 表达式
#  lambda 参数列表: 真区间 if 表达式判断 else 假区间
res = lambda sex:"很man" if sex=='男' else "很nice"
print(res('女'))

迭代器

可迭代对象可以转化为迭代器对象,从第一个元素从前往后遍历,直到集合中的所有元素被访问完毕

iter()

功能:把可迭代的对象,转为一个迭代器对象
参数:只能是可迭代的对象 (字符串,列表,元组,字典)
返回值: 迭代器对象
注意:迭代器一定是一个可以迭代的对象,但是可迭代对象不一定是迭代器

next()

next()函数可以去调用迭代器,并返回迭代器中的下一个数据

迭代器的取值方案

  1. next() 调用一次获取一次,直到数据被取完
  2. list() 使用list函数直接取出迭代器中的所有数据
  3. for 使用for循环遍历迭代器的数据
r = ['张三','李四','王五','二麻子']
'''
1. next() 调用一次获取一次,直到数据被取完                   
2. list() 使用list函数直接取出迭代器中的所有数据              
3. for    使用for循环遍历迭代器的数据  
'''
res = iter(r)
# print(next(res)) #1
# print(list(res)) #2
# 3
for i in res:
    print(i)

迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错

检测迭代器和可迭代对象的方法

迭代器一定是可迭代的对象,可迭代的对象不一定是迭代器

from collections.abc import Iterator,Iterable                   
                                                                
varstr = '123456'                                               
res = iter(varstr)                                              
                                                                
# type() 函数返回当前数据的类型,                                           
# isinstance() 检测一个数据是不是一个指定的类型                                 
r1 = isinstance(varstr,Iterable) # True 可迭代对象                   
r2 = isinstance(varstr,Iterator) # False 不是一个迭代器                
r3 = isinstance(res,Iterable) # True 可迭代对象                      
r4 = isinstance(res,Iterator) # True 是一个迭代器                     
print(r1,r2)                                                    
print(r3,r4)         
# 迭代器一定是一个可迭代的对象,可迭代对象不一定是迭代器                                           
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:44:08  更:2021-12-24 18:45:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:58:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码