Python基础之day05-强化练习

文章目录

  • Python基础之day05-强化练习
  • 一、递归函数
  • 二、eval函数
  • 三、lambda匿名函数
  • 四、range函数
  • 五、列表、字典、集合、元祖推导式

代码仓库地址: https://gitee.com/andox_yj/python

一、递归函数

  1. 介绍:如果一个函数在内部调用自己本身的话,这个函数就是递归函数。

  2. 注意:递归函数一般有终止条件,不然会一直嵌套调用下去,最多嵌套调用996次后程序就会报错

  3. 递归函数调用过程

    # 一、递归用法
    def function(num):# 2.结束条件if num < 10:print(num)# 3.调用自己function(num + 1)# 1.函数入口
    function(1)# 二、递归应用:计算阶乘
    def calNum(num):if num >= 1:result = num * calNum(num - 1)else:result = 1return resultret = calNum(3)
    print(ret)  # 6
    

二、eval函数

  1. eval函数介绍:用来执行一个字符串表达式,并返回表达式的值。
    注意:

    • 只会解析一层,既如果这个字符串里有变量的值依然是字符串,则会报错。
    • 如果字符串里的变量没有定义,则会报错。
  2. 表达式介绍:由值、变量和操作符(或叫运算符)的组合,单独的值或变量也是表达式。例如:a=10; a * 3
  3. 代码示例
    # 1、将str01里的a解析成变量后再运算。
    a = 10 + 5
    str01 = 'a + 20'
    print(str01)  # <class 'str'> a + 20
    print(eval(str01))  # <class 'int'> 35# 2、如果需要单独解析变量b,则需要在str01表达式中再添加一个eval来解析b
    b = "10 + 5"
    str01 = 'eval(b) + 20'
    print(str01)  # <class 'str'> eval(b) + 20
    print(eval(str01))  # <class 'int'> 35# 3、将字符串转成对应类型数据
    list01 = '[1, 2, 3]'
    dict01 = '{"name": "zhang", "age": "18"}'
    num = '10'
    float01 = '10.1'
    print(type(eval(list01)))  # <class 'list'>
    print(type(eval(dict01)))  # <class 'dict'>
    print(type(eval(num)))  # <class 'int'>
    print(type(eval(float01)))  # <class 'float'># 4.拼接变量名取值
    aa = "as"
    bb = "df"
    asdf = 10
    print(eval(aa + bb))  # 10
    

三、lambda匿名函数

  1. 介绍:用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
  2. 代码示例
    # 用法:变量名 = lambda [arg1 [,arg2,.....argn]]:expression
    # 1、lambda用法
    sum = lambda arg1, arg2: arg1 + arg2
    # 将lambda函数赋值给sum,当使用sum时需要传递参数
    print("Value of total : %s" % sum(10, 20))
    print("Value of total : %s" % sum(20, 20))# 2、lambda排序字符串
    str01 = ['foo', 'card', 'bar', 'aaaa', 'abab']
    # key接收一个函数,并将列表中的每个元素作为参数传入该函数,函数返回值与每个元素对应后,sort根据返回值对元素进行排序。
    # lambda将每个字符串的每个字符转成列表再用set集合去重,len计算长度后返回sort进行排序
    str01.sort(key=lambda x: len(set(list(x))))
    print(str01)  # ['aaaa', 'foo', 'abab', 'bar', 'card']# 3、lambda排序二维列表
    list01 = [[1, 7], [1, 5], [2, 4], [1, 1]]
    # 按照一维来排序
    list01.sort()
    print(list01)  # [[1, 1], [1, 5], [1, 7], [2, 4]]
    # 按照二维来排序,key接收一个函数,并将列表中的每个元素作为参数传入该函数,lambda 返回每个参数的第二个值给sort排序
    list01.sort(key=lambda x: x[1])
    print(list01)  # [[1, 1], [2, 4], [1, 5], [1, 7]]# 4、lambda排序字典
    students = [{"name": "zhangsan", "age": 18},{"name": "lisi", "age": 19},{"name": "wangwu", "age": 17}
    ]
    # 将字典的key或者value返回给sort进行排序
    students.sort(key=lambda x: x["name"])
    print(students)  # [{'name': 'lisi', 'age': 19}, {'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}]# 5、lambda+filter对列表过滤
    numbers_list = [2, 6, 8, 10, 11, 4, 12, 7, 13, 17, 0, 3, 21]
    # filter返回一个filter对象,可用列表接收这个对象存放每个过滤出来的元素
    # filter接收一个函数,一个可迭代对象,将每个元素传入函数里面过滤。
    filtered_list = list(filter(lambda num: (num > 7), numbers_list))
    print(filtered_list)  # [8, 10, 11, 12, 13, 17, 21]
    

四、range函数

  1. 介绍:range函数根据传入的整数范围参数,生成一个迭代器,既装有赠书的列表
  2. 代码示例
    # 使用:range(start, stop[, step])
    # 1、默认从0开始到结束值
    a = list(range(5))
    print(a)  # [0, 1, 2, 3, 4]# 2、包括开始值不包括结束值
    b = list(range(1, 6))
    print(b)  # [1, 2, 3, 4, 5]# 3、给定步长
    c = list(range(0, 10, 2))
    print(c)  # [0, 2, 4, 6, 8]# 4、倒序输出,需要指定步长为-1
    b = list(range(3, -3, -1))
    print(b)  # [3, 2, 1, 0, -1, -2]# 5、在for循环中使用
    for e in range(10):print(e)
    

五、列表、字典、集合、元祖推导式

  1. 介绍:推导式是根据一组数据序列,逐条经过处理后,生成一个新的数据序列,其可对每个数据添加条件判断后再处理。
  2. 代码示例
    """
    列表推导式 [表达式 for 变量 in 列表 [if 条件] ]
    字典推导式 {key:value for key in 列表 [if 条件] }
    集合推导式 {表达式 for 变量 in 列表 [if 条件] }
    元祖推导式 (表达式 for 变量 in 列表 [if 条件] )
    """
    # ################# 1、列表推导式 ####################
    # 原始列表值
    old_list = [1, 2, 3, 4, 5]# 不带if的列表推导式
    new_list = [i + 1 for i in old_list]
    print(new_list)  # [2, 3, 4, 5, 6]# 带if的列表推导式,既先判断条件满足后再进行处理。
    new_list_if = [str(i) for i in old_list if i > 2]
    print(new_list_if)  # ['3', '4', '5']# 两个for循环
    list_2 = [(x, y) for x in range(3) for y in range(2)]
    print(list_2)  # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]# 三个for循环
    list_3 = [(x, y, z) for x in range(3) for y in range(2) for z in range(1)]
    print(list_3)  # [(0, 0, 0), (0, 1, 0), (1, 0, 0), (1, 1, 0), (2, 0, 0), (2, 1, 0)]# 三个for循环加if
    list_3_if = [(x, y, z) for x in range(3) for y in range(2) for z in range(1) if y == 1]
    print(list_3_if)  # [(0, 1, 0), (1, 1, 0), (2, 1, 0)]
    # 以上等同于下面这种写法:
    list_3_if = []
    for x in range(3):for y in range(2):for z in range(1):if y == 1:list_3_if.append((x, y, z))
    print(list_3_if)  # [(0, 1, 0), (1, 1, 0), (2, 1, 0)]# 列表推导式案例:计算30以内可以被3整除的整数
    multiples = [i for i in range(30) if i % 3 == 0]
    print(multiples)  # [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]# ################# 2、字典推导式 ####################
    # 原始列表值
    old_list = ['Google', 'Python', 'Mac']
    old_dict = {'name': "张三", 'age': '18', 'gender': "man"}# 不带if的字典推导式
    new_dict = {key: len(key) for key in old_list}
    print(new_dict)  # {'Google': 6, 'Python': 6, 'Mac': 3}
    # 如果直接循环字典,输出的是字典的key
    new_dict = {key: len(value) for key, value in old_dict.items()}
    print(new_dict)  # {'name': 2, 'age': 2, 'gender': 3}# 带if的字典推导式
    new_dict = {key: eval(value) + 1 for key, value in old_dict.items() if key == "age"}
    print(new_dict)  # {'age': 19}# ################# 3、集合推导式 ####################
    # 既元素没有重复,包裹在大括号中
    square = {i ** 2 for i in (1, 2, 3, 4, 5)}
    print(square)  # {1, 4, 9, 16, 25}# 集合案例1:字符串去重
    set_srt = {s for s in 'asdlvabsdfasdf'}
    print(set_srt)  # {'l', 's', 'f', 'b', 'd', 'a', 'v'}
    print(type(set_srt))  # <class 'set'># 集合案例2:输出不是abc的字符,且不重复,
    set_srt = {s for s in 'asdlvabsdfasdf' if s not in 'abc'}
    print(set_srt)  # {'v', 'l', 's', 'f', 'd'}
    print(type(set_srt))  # <class 'set'># ################# 4、元素推导式 ####################
    new_tuple = (x for x in range(1, 10))  # 返回的是生成器对象
    # 使用 tuple() 函数,可以直接将生成器对象转换成元组
    print(tuple(new_tuple))  # (1, 2, 3, 4, 5, 6, 7, 8, 9)
    

Python基础之day05-强化练习相关推荐

  1. Python基础day05 作业解析【10道 函数作业题】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day04[函数(定义与调用.文档说明.传参函数.全局变量.返回值.嵌套调用)] ...

  2. Python基础day05【函数应用:学生管理系统、拆包、今日总结】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  3. Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  4. Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...

  5. python基础语法 第0关print-温州文成高校邦数据科学通识课【Python基础语法】答案...

    温州文成高校邦数据科学通识课[Python基础语法]答案it8p 温州文成高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:网课,智慧树,知到,超星,尔雅,学习通 ...

  6. python基础教程多少钱-厦门厦禾路Python基础教程培训费用多少-泰兴市新闻

    厦门厦禾路Python基础教程培训费用多少-泰兴市新闻 [美力程]是厦门中信教育旗下,专注于中国6-18岁青少年STEAM创客教育的先锋品牌.依托中心20+年积累的计算机教育经验和职业IT精英教研团队 ...

  7. python基础教程是什么意思-python基础教程都有什么?

    分享一下传智播客的python基础教程 第一阶段 Python核心编程 可掌握的核心能力 1.掌握Python基础语法,具备基础的编程能力; 2.建立起编程思维以及面向对象程序设计思想.解决的现实问题 ...

  8. 【Python基础】Github标星4.7k,每天推送一个python小实例的Python库

    文章来源于Python与算法社区,作者zhenguo 推荐一个 python-small-examples 库,每天推送一个Python实例.时至今日,共有4700人 star 期间多次登上githu ...

  9. Python基础day02【if结构、if elif 结构、while循环、for循环、Break和continue、Debug 调试、三目运算、循环 else 结构】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[九天课程]博客笔记汇总表[黑马程序员] Python基础day02 作业解析[6道 if 判断题.9道 循环题]      学习目标: 能 ...

  10. 超全面Python基础入门教程【十天课程】博客笔记汇总表

    目录 1.学习地址 2.下载地址[视频.源码.课件.软件] 3.详细博客笔记 Day 01 Day 02 Day 03 Day 04 Day 05 Day 06 Day 07 Day 08 Day 0 ...

最新文章

  1. .html?t=1a=2类似传递参数到flex中
  2. 【Nginx】浏览器请求URL遇到错误:no-referrer-when-downgrade
  3. 如何用excel筛选相似内容_Excel中如何将两组数据的相同内容进行快速筛选配对...
  4. 运行一个Hadoop Job所需要指定的属性
  5. 一个C++程序执行main函数前和执行完main函数后会发生什么。
  6. 阿里:“马云从未转让和退出”;华为三星和解;拼多多回应传闻 | 极客头条...
  7. 让cat命令有颜色得输出文件(ccat)
  8. 浅谈Event Loop
  9. 计算机二级C语言考试题库软件
  10. 2021中兴捧月杯算法大赛模面大赛总结
  11. OSChina 娱乐弹弹弹——周一至周五,汗滴禾下土
  12. 299. 猜数字游戏【我亦无他唯手熟尔】
  13. 用python画小狗,用turtle画个单身狗送给自己~
  14. CF1367C - Social Distance
  15. KMP算法(快速找出字串)
  16. 第4章第1节:如何往幻灯片中插入指定行和列的表格 [PowerPoint精美幻灯片实战教程]
  17. 软件需求规格说明书描述的10类非功能性需求
  18. Java基础:面向对象特性(多态)
  19. Android小项目——仿iPhone计算器
  20. 生成王者荣耀装备信息Markdown和Excel

热门文章

  1. 2023年2月用户体验GX评测:国有行及股份行持续领跑,农商行农信社积极探索用户体验提升
  2. C#设置滚动条定时滚动
  3. spring swing_使用Swing的Spring简介
  4. 复旦大学2018--2019学年第一学期(18级)高等代数I期末考试第八大题解答
  5. 没有四肢的生命 - 尼克·武伊契奇
  6. 【知识点】大数分解与素数判定 --- 【Miller-rabin算法】【pollard-rho算法】
  7. python办公自动化(八)python-docx实现word的批量合并、制作邀请函以及数据的情感分析
  8. 线性回归 - 宝可梦案例
  9. 通俗易懂的双亲委派机制
  10. MIT计算机博士自述:我为什么要念博士