学习Python的一个心得, 与君共勉

编程入门 行业动态 更新时间:2024-10-06 20:28:27

学习Python的一个心得, <a href=https://www.elefans.com/category/jswz/34/1763881.html style=与君共勉"/>

学习Python的一个心得, 与君共勉

在说心得之前, 我们先说一个问题, 根据解决问题的思路, 最后说一下自己的一个小心得.

有一组数据arr=[1,2,3,4], 筛选出能被2整除的nums=[2,4],然后再加3,最后得到[5,7]

我们使用Python实现一下

def filter(arr):nums = []for v in arr:if v % 2 == 0:nums.append(v)return numsarr = [1, 2, 3, 4]
nums = filter(arr)for v in nums:print(v + 3)

从代码中我们发现, 存在两个数组,arr和nums
arr是用来存放原始数据
nums是用来存放被2整除的数据

我们来算一笔账
从arr中筛选出来数据共循环了4次
循环nums共2次
所以加起来循环了6次

当数据量非常大的时候, 意味着arr很大, nums也很大, 一次性将数据放入内存肯定是不现实不可能的.而且即便内存放的下, 两次循环可就不是简单的4+2=6这么少的次数了.

因此为了解决数据量大循环次数多的问题, 我们对代码进行改进

def filter(arr):for v in arr:if v % 2 == 0:yield v    #1arr = [1, 2, 3, 4]
nums = filter(arr)for v in nums:print(v + 3)   #2

和之前的代码比较, 一个是nums消失了, 第二个就是多了一个yield
经过这么一改动, 第一减少了内存空间(数据量大), 第二减少一个循环操作

  • 一方面我们少用了一个nums, 的确少用了内存空间, 其实更重要的是我们可以处理大数据量的情况了, 不需要将大数据量一次性加载到内存, 而是像流水一样, 慢慢地流入到我们的程序, 它是需要yield协助的.
  • 同时yield也解决了减少循环

上面的代码执行流程是这样的


当代码执行到第4行时, 接下来会执行第9行代码, 此时的nums里面就一个值.
在循环arr时, 只要代码执行到第4行接下来就会执行第9行.
所以说代码里面虽然写了两个for, 但是其实只是循环了一个for, 我们甚至可以简单的理解成如下代码

def filter(arr):for v in arr:if v % 2 == 0:print(v + 3)arr = [1, 2, 3, 4]
filter(arr)

读者可不要问, 对呀, 那你为啥不这么写呢.
其实我这里只是举例, 毕竟业务复杂的时候, 每个函数需要完成独立的功能, 对修改关闭, 对扩展开放, 我们不可能把所有的东东都写到一个函数里.
我们是基于不同函数之间传递数据而讲的.


在没有学习Python之前(我是搞Java开发的), 我对于类似的处理也是一开始那样的处理方式, 当我学习了Python, 学到了这个思路以后, 会觉得思路开阔了许多.
有时候你不要简单的考虑, 反正我是Java开发, 学习Python能干啥, 顶多就是用它写写脚本吧, 才不学呢. 其实有时候我们学习新的知识, 并不是为了学习知识而学习, 更重要学习过程, 或者说更重要的是升华出来的思想, 解决问题的思路, 而并不是知识本身.

习技固然可以成为人杰, 悟道才能羽化升仙, 思想才是王道.


    个人网站

    微信公众号

更多推荐

学习Python的一个心得, 与君共勉

本文发布于:2024-02-14 13:17:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763529.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:与君   心得   Python

发布评论

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

>www.elefans.com

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