• Python技能树——进阶语法讲解(1)


    写此篇有以下几个原因:

    1,我发现我自己学python这么久了(今年2月份开始),也不知道有这种进阶的语法,只是对其中的某些部分有点点的了解。

    2,我是偶然间看到python技能树,原先是不知道CSDN里面有这个的。

    3,最近做的项目涉及了yolov3,我也感觉我自己缺了很多东西,项目实战也是更新到了《Opencv项目实战:07 人脸识别和考勤系统》,越来越难了,感觉只学习了opencv的我有点不够用了,所以我决定延后一些时间,我再去补一补Opencv和一些算法知识。

    4,马上要开学了,我要转战机器学习了,网课的资源也找好了,刚好连写了七天的博客,所以我不准备中止停下,结合着一边学习技能树里面的知识,一边写博客。中间我会掺杂着我在看网课时学习的知识。

    5,我发现里面有些东西用处其实不大,我都没有怎么用过,所以我这是简略的版本,只记录我觉得平时可能用的到得知识。

    目录

    列表推导式

    字典推导式

    三元表达式

    断言


    1* 列表推导式

    • 在我看来,这是一种代替for循环的简便方法:
    • 它的语法格式是:[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
    • 它不够形象,我们用代码来举例子。

    for 循环写法

    1. my_list = [1,2,3]
    2. new_list = []
    3. for i in my_list:
    4. new_list.append(i*2)
    5. print(new_list)
    6. #运行台#
    7. [2, 4, 6]

    列表推导式写法

    1. my_list = [1,2,3]
    2. nn_list = [i*2 for i in my_list]
    3. print(nn_list)
    4. #运行台#
    5. [2, 4, 6]

     优化两层for循环 

    1. nn_list = [(x,y) for x in range(3) for y in range(3) ]
    2. print(nn_list)
    3. #运行台#
    4. [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

    它当然可以优化更多的层数,但我并不建议你这样做,两层以上后它的实用性不高,可读性也不高,如果真的用到两层以上的循环,我觉得还是老老实实的敲吧。

     支持嵌套

    1. my_var = [y*4 for y in [x*2 for x in range(3)]]
    2. print(my_var)
    3. #运行台#
    4. [0, 8, 16]

      用于过滤数据 

    列表表达式,可以将列表中满足条件表达式的值进行筛选过滤,获取目标数据。

    1. my_list = [1, 2, 3]
    2. new_list = [item for item in my_list if item > 1]
    3. print(new_list)
    4. #运行台#
    5. [2, 3]

     

    2* 字典推导式

    • 有了列表推导式的基础,这个就相对简单多了。
    • 它的语法格式为:{key:value for 迭代变量 in 可迭代对象 [if 条件表达式]}
    • 来看看实际的代码:
    1. my_dict = {key: value for key in range(3) for value in range(2)}
    2. print(my_dict)
    3. #运行台#
    4. {0: 1, 1: 1, 2: 1}

    此时需要注意的是字典中不能出现同名的 key,第二次出现就把第一个值覆盖掉了,所以得到的 value 都是 1。

    最常见的还是下述的代码,遍历一个具有键值关系的可迭代对象

    1. my_tuple_list = [('name', '橡皮擦'), ('age', 18),('class', 'no1'), ('like', 'python')]
    2. my_dict = {key: value for key, value in my_tuple_list}
    3. print(my_dict)
    4. #运行台#
    5. {'name': '橡皮擦', 'age': 18, 'class': 'no1', 'like': 'python'}

    3* 三元表达式

    我觉得较为用于的是三元表达式与 lambda的结合,它能让代码更加的简洁,单独的三元表达式,我觉得就用条件语句足够了。

    案例如下:

    实现——声明一个函数,返回较大值

    1. def max(a, b):
    2. if a > b:
    3. max = a
    4. else:
    5. max = b
    6. return max
    7. c = max(5, 6)
    8. print(c)

    由于上述代码非常简单,可以直接使用 lambda 匿名函数实现。

    1. max = lambda a, b: a if a > b else b
    2. c = max(10, 15)
    3. print(c)

     4* 断言

    直接展示用法,如果使用,肯定也是开发人员使用。

    1. a=int(input())
    2. def overage18(age):
    3. assert age >= 18, "对不起未满18岁,无法进行游戏"
    4. print("享受欢乐游戏时光")
    5. if __name__ == '__main__':
    6. overage18(a)
    7. #运行台#
    8. 15
    9. AssertionError: 对不起未满18岁,无法进行游戏
    10. 18
    11. 享受欢乐游戏时光

    断言其主要为调试辅助而生,为的是程序自检,并不是为了处理错误,程序 BUG 还是需要依赖 try… except 解决。并不是很推荐使用。目前来看,我只需做个了解,即可。

    具体请参照列表推导式-进阶语法-CSDNPython入门技能树

    本篇源于自己的梳理,属于是将我自己认为用的上的知识点的总结。

  • 相关阅读:
    【附源码】Python计算机毕业设计网上购物平台
    百度大模型安全荣获2024世界智能产业博览会“Find智能科技创新应用典型案例”
    【C++】初识Cplusplus
    数据湖:数据库数据迁移工具Sqoop
    【程序大侠传】异步架构应用回调数据接收接口偶发NPE
    信创生态丨九州未来与超聚变完成兼容性互认证
    《Redis篇》Another Redis DeskTop Manager 超详细安装教程
    pandas 构造时间值
    Opencv项目实战:09 物体尺寸测量
    HashSet和HashMap
  • 原文地址:https://blog.csdn.net/m0_62919535/article/details/126714058