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

写此篇有以下几个原因:

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

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

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

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

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

目录

列表推导式

字典推导式

三元表达式

断言


1* 列表推导式

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

for 循环写法

my_list = [1,2,3]
new_list = []
for i in my_list:
    new_list.append(i*2)

print(new_list)

#运行台#
[2, 4, 6]

列表推导式写法

my_list = [1,2,3]
nn_list = [i*2 for i in my_list]
print(nn_list)

#运行台#
[2, 4, 6]

 优化两层for循环 

nn_list = [(x,y) for x in range(3) for y in range(3) ]
print(nn_list)

#运行台#
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

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

 支持嵌套

my_var = [y*4 for y in [x*2 for x in range(3)]]
print(my_var)

#运行台#
[0, 8, 16]

  用于过滤数据 

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

my_list = [1, 2, 3]
new_list = [item for item in my_list if item > 1]
print(new_list)

#运行台#
[2, 3]

2* 字典推导式

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

#运行台#
{0: 1, 1: 1, 2: 1}

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

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

my_tuple_list = [('name', '橡皮擦'), ('age', 18),('class', 'no1'), ('like', 'python')]
my_dict = {key: value for key, value in my_tuple_list}
print(my_dict)

#运行台#
{'name': '橡皮擦', 'age': 18, 'class': 'no1', 'like': 'python'}

3* 三元表达式

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

案例如下:

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

def max(a, b):
    if a > b:
        max = a
    else:
        max = b
    return max

c = max(5, 6)
print(c)

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

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

 4* 断言

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

a=int(input())
def overage18(age):
    assert age >= 18, "对不起未满18岁,无法进行游戏"
    print("享受欢乐游戏时光")

if __name__ == '__main__':
    overage18(a)

#运行台#
15
AssertionError: 对不起未满18岁,无法进行游戏

18
享受欢乐游戏时光

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

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

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

猜你喜欢

转载自blog.csdn.net/m0_62919535/article/details/126714058