《Fluent Python》读书笔记

编程入门 行业动态 更新时间:2024-10-14 18:18:34

《Fluent Python》<a href=https://www.elefans.com/category/jswz/34/1768764.html style=读书笔记"/>

《Fluent Python》读书笔记

前面使用列表解释非常强大了,那么又为什么要引入产生表达式呢?如果仔细地看一下前面的解释表达式,它会把每一项值都计算出来,如果只是项数比较少时,或许是比较好的方式。如果需要访问的数据量有几万,几百万项,那么每一项计算出来是需要很多时间,同时也需要占用很多内存。毕竟内存是一台电脑有限的资源,如果数量用了,就不能再处理了。比如只有4G内存,那么最大也只能处理4G数据。为了突破这两个限制,需要另外一种语法,就是产生表达式。

产生表达式的语法跟列表解释是一样的,只不过它是在外面包含一对圆括号,而不方括号。可以使用下面的代码来比较两者的区别:

s = 'abcde'

t = tuple(ord(x) for x in s)

print(t)

 

n = ['1','2','3']

 

l = [(x,y) for x in s for y in n]

print(l)

 

ge = ((x,y) for x in s for y in n)

print(ge)

for g in ge:

    print(g)

列表解释是[(x,y) for x in s for y in n],产生式表达式是((x,y) for x in s for y in n)。

 

元组分解

当一个元组里的元素要取出来时,叫做元组分解。第一种方法是并行赋值的方式:

a, b = (1, 2)

这样在左边是逗号表达式,右边是元组,就可以并行赋值获得元组对应位置的值,如果不想要的值,可以采用下划线_的占位符:

_, b = (1, 3)

 

用*收集元组多余项

在定义函数参数时,可以使用*arg的方式来收集多个参数为列表的形式,这种方式在并行赋值里也可以使用:

a, b, *rest = range(5)

print(a,b,rest)

结果如下:

0 1 [2, 3, 4]

由此可见,*rest部分收集所有剩余部分的元素。

a,*rest, b = range(5)

print(a,b,rest)

可以放在不同的位置上,结果输出:0 4 [1, 2, 3]。

 

嵌套元组分解

l = [('a','b',(1,2)),('a','b',(3,4))]

for a, b, (c,d) in l:

    print(a,b,c,d)

在这里由于('a','b',(1,2))是元组嵌套,所在采用a, b, (c,d)方式来分解。

 

命名元组提供元素按名称分解,方便调试和使用。

Card = collections.namedtuple('Card', ['rank', 'suit'])

 

切片

所有序列性的容器都支持切片,list,tuple,str等等。

切片重点:最后元素不包含,因为python是以0索引开始。

 

列表的排序sort函数和内置函数sorted排序的区别

a1 = ['a','b','z','o','d']

print(sorted(a1))

print(a1)

 

a1 = ['a','b','z','o','d']

print(a1.sort())

print(a1)

从上面例子可见,列表排序是在原列表里修改位置,而内置函数是产生一个新列表返回,原来列表不改变。

 

 

 

玩转人工智能库-深入浅出OpenCV

 

更多推荐

《Fluent Python》读书笔记

本文发布于:2024-03-06 05:42:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714508.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:读书笔记   Fluent   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!