Python学习过程中的一些心得体会

Python学习过程中的一些心得体会

我学习python也有几年时间了。对我而言,python已经远不止是一门编程语言了,而是我的一位好朋友。所以每次写代码时,感觉是和好朋友聊天,而当看到别人的py代码时,就如碰到一位旧时好友,一见如故,总有一种莫名的亲切感。恰好最近也有许多人问我关于python的学习方法,以及如何学习爬虫的问题。所以我就借此总结一下我在Python学习过程中的心得体会。

PS:这篇文章很早就写了,偶然发现放草稿箱里一年多了,现在(2020.01)补充了后面的部分内容。

我最开始接触到python大概是在高三毕业的那个暑假,刚参加完川大的自主招生。能有幸得到赵辉老师的赏识,让我在上大学之前就接触到了树莓派。也因此在那个时候就开始踏上了linux的学习之路。到现在都受益匪浅,对于赵辉老师的知遇之恩则一直都铭记在心。

高三的暑假便一直在折腾树莓派,但当时一直还只是在熟悉linux的各种操作。真正开始系统学习是在大一的时候。因为树莓派小车主要是选择python或C来编程的。虽然我在高中时写过C语言程序,但树莓派小车的编程中发现实现相同功能py的代码量相对于C来说确实要少很多,而且我更是钟意python的简洁和代码可读性。特别是我在做渗透写poc或exp时,为我节省了大量时间。所以搞安全的,基本上都用的python。

熟练掌握Python基础

我一开始就在图书馆借了几本基础的书来看,因为python代码本身就非常简洁,所以对于书上的示例代码挨着敲一遍。真的不要怕麻烦,自己敲过一遍以后,印象会比单纯看书要深得多。因为当时也有一定c语言的基础,所以学习起来就很快。

我觉得对于刚开始学习python,一定要熟练掌握python中的几种基本数据类型。数字,字符串,列表,元组,字典。这些内容在日后学习中更是经常用到。对于基础的概念,虽不必刻意去记,但代码一定要多敲。比如字符串是不可变序列,字典是无序的。这些在写代码的过程中遇到报错之后自然会熟记于心。因为在写爬虫的时候,对字符串这些的处理就会用的比较多。

另外非常推荐初学者可以去看小甲鱼的视频。小甲鱼的语言非常幽默诙谐,讲的也很浅显易懂。我当时也是看过他讲的很多内容。真的很赞!而且B站上可以直接观看,链接: 小甲鱼学python    。

python2 or python3 ?

对于python版本而言,python3肯定是今后的主流。所以初学python的话,直接学python3就行了。而且2和3的大体上来说还是相近的。把一些常见的区别记住就行了。比如

  1. print函数:(Python3中print为一个函数,必须用括号括起来;Python2中print为class)
  2. 通过input()解析用户的输入:(Python3中input得到的为str;Python2的input的到的为int型,Python2的raw_input得到的为str类型)统一一下:Python3中用input,Python2中用row_input,都输入为str

  3. xrange模块:在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中xrange() 会抛出命名异常)。

虽然目前Python2官方已经停止维护,但是像一些安全工具sqlmap依旧是2的版本。

爬虫的学习。

可能大部分人都是从爬虫开始学习python的。因为确实提到爬虫这个词,总能想到python。当然爬虫不止python。我学习python的过程中一开始也喜欢写爬虫从网上抓取一些信息。

网络方面的知识。了解TCP/IP协议,以及常用的http请求方法。比如常见的get,post,head方法。还有http状态码,200,302,403,404,500这些的含义都是必须知道的。

对于爬虫的学习,我觉得是很大一部分对一些库的学习。像最常用的requests,BeautifulSoup。我们要深入做爬虫,首先得了解这个东西是怎么做的了解清楚它的原理,那么web前端方面的学习是必不可少的,了解一下html标签,javascript渲染,ajax异步传输等等。

正则表达式。在提取数据时经常会需要用正则来匹配我们需要的信息。不过正则写起来稍微困难些。

Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。这是我爬虫最常用的库之一,相比正则就要简单多了,整个爬虫代码量也会少很多。

数据库。将抓取的内容放在哪?我通常是直接放数据库里。但掌握数据库知识并不是必须的,也可以直接把内容存到本地。

了解反爬虫。这方面的知识可以自行百度,google。

爬虫的内容只能浅尝辄止,涉及到的知识细节很多。我在学习爬虫的过程中,看了很多崔庆才老师的python爬虫视频,讲的十分详细。

养成做笔记的习惯。

我觉得这也是我自己一个比较好的习惯吧。不仅适用于学习python。对于自己不懂的地方。或是别人有更巧妙的方法都可以记下来。虽然我觉得在大学期间周围的同学相对比较少做笔记,即便写也是用电脑或手机来代替。但我还是特别喜欢手写下来,像这样的笔记大概也写了上千页了吧。

这张图是我记的一道小米运维的面试题,题目上是要求用shell脚本来写,我感觉他给答案挺好的,所以就把他记录下来了。然后我就思考如果这道题面试官要求用python来写的会怎样呢,所以我就把自己的思路用python写出来了。这样一来不仅有所收获,而且印象也更加深刻了。

多思考,或许我的代码更优秀。

这是我之前在看微信公众号上的一篇关于python字符串反转的文章,原文链接点这里

其中的最后一种方法是 对称交换法

这是原文作者给出的代码,不过我看了之后我觉得代码可以更优化。

因为作者是用的while,而且还要考虑字符串长度为0的情况。我在留言中就给出了for循环的解法,通过int向下取整,避免了为0的情况。代码也简洁了许多。

多参加一些论坛或讲座

有的时候学校会举办一些讲座,邀请这方面的专家给大家讲课。这些都是大有裨益的,如果学校有这方面的资源就一定要利用起来 。以我为例,我的学校没有这么好的设施条件,所以我就只能经常去其他学校参加这样的活动。也许有的时候得不到的反而就更加珍惜吧。

这是上次我(右)和王总(左)一起去西南交大参加PYCON,听其他python大佬分享py在各个领域中的一些前沿应用。get各种新技能,也确实是很开心的一件事。

多出去学习,不仅能提升自己的技术和开拓眼界,也能认识很多厉害的大佬,算是拓展自己的人脉吧。我印象最深刻的就是去年11月份的时候,我带着我们学校网安协会的成员去参加天府杯网络安全论坛。恰好第一天下午讲的是云安全,是阿里云安全一位的高级安全专家,他讲的是ddos攻击的防御。会后我有幸能和他一起交流云上的一些攻击以及阿里的态势感知技术。最后还顺利加到了大佬的微信,收获颇丰。

多用Google和stackoverflow一类的网站

不懂的问题一定问Google,虽然大部分人都是直接百度,但是从我的学习经验来看,不仅限于Python的学习,这几年Google真的帮了我不少忙,Google实在太强大了,强烈推荐大家使用Google。

另外对于Python的问题可以多逛逛Stack Overflow论坛,基本上你遇到的有关Python的问题,在上面都能找到答案。这里我并不是否认CSDN,当你习惯逛Stack Overflow后,视野也会开拓很多,当然英语很重要,实在看不懂可以谷歌翻译码。

阅读Python标准库源码(进阶)

我这里说的是标准库的Python代码,而不是更底层的C。

这个方法是我一直非常推崇的一个方法,适合Python基础已经非常扎实的朋友。也是我一直在坚持做的一件事。

感兴趣的朋友可以阅读我博客里的 Python标准库源码阅读系列 的文章。

Python是一门语言,也有很多的第三方库可以调用。但是如果你只会调用别人的库,那你终究是个调包侠,代码报错也无法分析具体的原因,只能去网上搜索解决方法。从初学来看没有太大问题,但是想成为一名优秀的Python开发者真的离不开对源码的深入理解。仔细想想,很多大厂在面试时也会问道很多底层源码相关的内容,熟悉底层代码,对coding能力真的大有裨益。

这里我向大家推荐一下我的阅读源码的方法。

我一般是把Python标准库的代码直接打印出来,打印源码可以直接在Python的安装路径找到源码,找到需要的标准库源码然后自己排版打印出来。

然后根据自己的情况做笔记在源码上做笔记,多思考Python开发者为什么要这么写?为什么他们代码这么漂亮?里面有哪些优秀的方法能为我所用?不断模仿他们的代码,自己写出来的代码自然也不会太差。

例如这就是我在读os模块时所学到的优秀代码,之后我在自己的代码中也经常用到这样写法。

虽然阅读源码特别费时间,但是只要能坚持下来,coding能力会有质的飞跃。

最后分享一句我经常勉励自己的话:

冰冻三尺,非一日之寒。水滴石穿,非一日之功。

慢慢沉淀,自然会变得很优秀的!

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

目前为止有一条评论

xzlxr 发布于1:15 下午 - 2月 8, 2020

感谢分享

回复 xzlxr 取消回复