简明python指南(预览版)

本文作者:NTFS

因为,全文比较长,没有经过完整的校对,纰漏难免。

当前最新版本的 pdf 在此 -> 关注公众号 “ 无知红 ” 回复  “ 简明python指南 ” 即可获取下载链接

以下内容是为了方便搜索引擎索引特别加上的,不是给人看的。因此不进行频繁修补,只做积累更新(最后更新于2015年10月14日)。

PS:全文两万六千余字,目前32页,因为字数限制,不能完整复制进来。加之简书的功能实在很烂,于是图片和脚注就不一一补充了


本来这个是某系列连载文章中的第二期的第十五篇,不过限于篇幅,我觉得还是独立出来比较好。写这个指南的目的,是帮助大多数想接触python的人更方便更全面的认识这门编程语言并学会如何运用这套工具集。

与此同时我觉得现如今关于python的书大多都是多余的,它们花了很大的篇幅在讲些没用或者不相干的东西。很多书假定你对编程的理解还很模糊,假定你可能用着不同的操作系统,其实这对于大多数我的目标读者来讲,都是多余的。当然那也是出版社的无奈,我自然无所谓,我可以假定大家都用的windows,还都是xp以上,只要不影响行文就好。另外这个标题里的简明一词,是相对一本书的厚度而言的。

我最早知道python是09年,那时候还在用塞班的s60手机。后来是GAE,那时候版本还是2.5.x,不过因为已经高三了也就没去折腾。最初开始用python大概是从2012年秋季休学的时候算起,现在转眼都2.7.9了。眼看着python2的时代已然走到了尽头,虽然大家都还会继续用,只是过去的时光早已凶猛地从身边流逝了。

最初打算写关于python的教程是在2013年春。之前2011年刚高考完的时候想自己做个网站,于是2012年春的时候决定学python(主要受豆瓣的启发)。然而拖拖拉拉,直到那年秋末休学才开始投入起来。到2013年的时候基本的东西都会的差不多了,正好社团里有不少新人感兴趣,于是也打算教他们来一起玩,大概写教程的想法最早是这时候有的。后来就是一个悲剧的故事,我复学之后没能掌控好自己的节奏挂了许多课,社团这边的活动也没组织得好,外面帮公益机构做的东西也是一拖再拖直到烂尾。最后我选择降级到13级,虽然去年秋季有写些教程的草稿,但后来今年上半年因为个人问题不得不在家待半年,差不多都忘了。直到七月我回到学校,八月有人有重新跟我提起python的时候,这个中断了N次的想法才得以重新唤醒,虽然最后那个网站我并没有做出来。其实相比13/14年时候的想法,这些年来我对python的理解也有不少变化,尤其是在我接触了erlang和APL以后。这也是我决定丢掉去年的草稿重新写过的主要原因之一(另一方面是我忘记存哪了不太好找……)。

不过由于第一次写这种稍微正式一点的教程,字数会有点多。也许精简一下,或者说真正有用的部分估计不到6000字,然而这个环节要我自己察觉出来很不容易,所以如果能收到些反馈建议,而我也会对应做些改进,两全之策,岂不美哉。

另外,我建议记性不太好或者动手能力较差的,去打印一份(或者一部分)纸质版放在床头,虽然第一版是有点坑,不过我想说的其实是,有些时候纸质版的东西看上去更入眼。

目标读者

其实并没有很具体的目标,用这个二级标题只是在假装很严肃的样子。一开始定位在大一大二的小盆友(那是14年的时候,现在他们都大三大四了),不过就现在的情况发展下去,小学六年级以上也是可以的。

为什么学python?

这是很多书要跟你讲的第一章,很遗憾,我不会告诉你为什么。因为老实说python并不是一门很适合用来教学的语言,不过呢,它就是能用来偷懒,所以大家都用它。本质上来说,学会python并不是简单的学习它的语法和各种概念,而是学会读懂别人的python代码,学会自己写python,以及熟悉整个python的工具链和生态环境以致如何做项目等等。就是这样。而实际上学python是一个实践和积累的过程,也就是说本文并不能帮你太多。

准备工作

你需要装一个python解释器。我不会跟你解释具体解释器是什么鬼以及和编译器有什么差别,你所需要做的,就是理解这个过程并照着做一遍,碰到看不懂的地方,自己去搜一下或者直接问我也行->absente@live.cn

同样的,我也不会跟你讲太多什么是python2和python3的区别。这里你只需要下载个anaconda python2的集成环境就好。

然后是编辑器。初学我觉得sublime text 3或者notepad2-mod都可以,当然如果要推荐的话,我觉得sublime和pycharm就够了。vs2015其实也可以,不过有点太重型了,而且关键是我并不太熟悉…

还有就是备上两份文档,python2和python3的。Anaconda实际上会附上一份python2的chm文档,然而要自己去目录里找出来。这里个人觉得chm文档还是够用的,当然,如果你习惯多标签阅读,那么html的更适合你,如果是电子书的话,官网也有pdf。另外我推荐用那种专门的离线文档工具,比如zealdocs(mac下的是dash)。

这里附上windows下可用的anaconda和sublime text 3以及pycharm,zeal和官方的chm/html/pdf文档:

#百度网盘链接(合集):http://pan.baidu.com/s/1dD6nVn7

Python:https://www.python.org/

Anaconda:http://continuum.io/downloads

Sublime text 3:http://www.sublimetext.com/

Pycharm 4:https://www.jetbrains.com/pycharm/

Zeal / Dash:https://zealdocs.org/

装anaconda的时候一路默认next,这样python的执行路径应该也就在PATH环境变量里了,当然如果你实在是闲anaconda太大,也可以自己下个官方的Python,然后选择加到环境变量里。其实加到PATH里面并不是总是必须的,只是通常为了方便调试就成了潜规则。

语法概要

你可能觉得上来就讲语法会不会有点消化不良?其实不会的。所谓编程语言的语法,就是按照一定的符号规则去表达你的逻辑和程序流程。

在这里我觉得有必要列举一下其他语言的语法。首先是c语言(以下都是单行代码):

void main(){}

上面是一段合法且并没有什么卵用的c代码。本来想举个java的例子,不过好像不太确定怎么写,就搜了一下hello world,然后改了改,但是不确定是否一定合法,于是就放弃了。换成js:function

main(){}或者匿名函数形式的main = function(){}

然后是python:

def main(): pass或main =lambda: None

我们在这里不是要对比出什么优劣,那是西方人喜欢干的事情,而且相对没什么意义。这里我们需要做的是寻找其中的共性。比如你会发现它们都可以用圆括号来表示参数区域。

感觉真要讲语法的话,到这里就差不多了,最多给你强调一下,缩进一定要用四个空格,区块注释要用双引号。实际上python的语法并没有多复杂。很多语法关键字刚入门的话根本用不到,而且也不是那么容易搞懂(比如with和yield)。于是你只需明白几个基本概念就可以写python代码了。当然这里并不鼓励你马上去写个hello world,因为那也没什么实际意义,而且不太符合我国的教育习惯。这里我的思路是先讲点概念,然后教你怎么读懂python代码,然后再去改或者去写。当然,语法不可能就说这么点,那是开玩笑的。在讲概念之前,正经地补充点语法常识还是有必要的。

首先,python用缩进替代了大括号来限定作用域(缩进这个设定有好有坏,不过算是python比较明显的一个特征之一),当然,和传统编程语言一样,实际上限定作用域(或者说语法单元)的还是小括号。然后你可能会说为什么不强调没有分号这个问题,其实,python是允许分号的,只是依照潜规则,大家都不用而已。而且,如果你喜欢的话,还可以开启大括号缩进模式…不过出于人身安全考虑,不要这么做,这样只会被当作异教徒。

先说逻辑相关的,有几个关键字:and,or,not和is,==,!=,虽然这个用来替换&&, ||,!好像更直观了,但是有时候也会搞晕人。另外,逻辑运算的返回值只有两个,True和False,首字母大写。至于None这个是独立出来的一个值,对应C里面的null。容易搞混的地方自己动手试试最好做个笔记。is和==通常是不会等价的,所以如果一个值你能确定全等的时候,才尽量用is。用is的好处是有时候逻辑表达可以更连贯一点(有些时候计算效率也更高),比如A is B。但有时候也不一定符合表达习惯,比如A is not B。还有就是要明白,[] is []这种肯定是False的,因为不同的列表指向的内存空间肯定不同。

除了前面说到None,Python和C里面很多概念都是可以对应上的,这个往后用久了会有更多体会,但是要注意的是python也有自己提倡的一些潜规则,比如PEP8,然而这里面的很多规则实际上和C是不完全对应的,这也是我为什么个人并不提倡完全遵循pep8的原因之一。

说到这种潜规则,不得不提一下python的命名规则,变量和函数命名也是很重要的一个细节,python推荐用小写字母加下划线比如:blue_shit,如果是class的话会推荐你写作HolyShit,至于class method很多人也推荐小写加下划线(eat_shit)不过个人觉得继续用java那种小写字母开头的驼峰写法(eatShit)也不是什么坏事(毕竟Google也是这么玩的不是么)。不过通常来讲,个人自从用惯erlang之后就不再特别讲究这个了。比如前面的blue_shit可以缩写作S或BS/SB随意,有时候变量本身的意义并不是那么重要,只要不影响逻辑就好。所谓的代码可读性,其实只在你需要读懂代码的前提下才有意义,而有时候我们不用搞懂代码,只要会用就好了,这个概念比较类似道家的无用,不过外国人多半是搞不懂的。

流程控制方面,主要就是if和for,然后while用的很少(一般也就是结合yield或者来个mainloop),没有switch,switch用if和elif的组合代替。然后,python的else比较奇葩,if,for,while都可以在屁股后面加个else。if...else比较好理解,for...in后面的else只在for循环没有break的情况下最后执行(也就是补刀用,如果for没有完整走完是不会有的),while后面的else同理。然后,break跟continue是想反的,和c一样。不过python里面有个pass,这个语句没有啥作用,一般用在def后面临时写个空函数,然后结果和def a():return None是一样的。下写if分支的时候,你可以用pass临时占个位置。因为单独写个注释在build的时候还是会报错的,而补上pass就没事了。另外如果习惯了pass之后,可以用来标注某些未实现的功能,方便查找。还有就是,如果你习惯c里面的三元表达式即Z=X?A:B这种,python也提供了一个类似的语法糖即Y=A if X else B。后者可能对于印欧语系的人更为直观一点,然而对于天朝群众开讲可能还是c的写法更好记些吧。

补充说明一下,python的for和c看上去是不太一样的,因为python默认采取for in这种遍历的形式。如果要当c的for来用,一般是foriin range(N)。原理是这样的,range这个内置函数可以自动生成一个[0…9]的整数列表,然后for in会逐个提取出来赋值到i上面。

流程控制这部分,最重要的还是异常处理。老实说python的异常处理并不是很高明,只是勉强够用的那种(这方面erlang是目前做的最好的,没有之一)。一般最简形式是tr

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI大玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值