您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 强大的Python--完全用Python工作
完全用Python工作---HarnessthepowerofPython作者:石雨浓-----第一天,太初有道,神谕,importlight,于是便有光.(Quickfact:在python解释器里输入importantigravity有彩蛋)作为一个业余物理工作者以及入门计算机使用者,选择一门称手的编程语言是非常重要的事.从计算能带,处理数据,编写脚本到画图,写个http服务器分享文件(看上去很专业,实际在Python里只有一行),做个网页,几乎全部需要计算机完成.但是为了这其中每个不同的目的单独去学一门语言成本简直过于高,于是需要一个一般用途(general-purpose)的语言,处理所有的事是非常自然的事情.编程语言的两极是Assembly和Haskell,一个接近硬件的本质,一个接近计算的本质.一个是地狱,处理着最繁琐最耗神的事情:内存分配,系统调度,硬件架构,各种寄存器A1,B2...一个是天堂,优美的写着递归,高阶函数,lambda表达式,优美的并行计算(完全不用考虑racecondition).然而我们生活在人间,所以大规模应用的语言不可能如此纯粹.两端中间游离着很多general-purpose的语言,C,C++,Java,Ruby,几乎都能达到我们所有日常的要求.只不过,这些语言能做的Python都能做,而且Python做得更好。接下来我说明为什么。但是要说明本文的读者不包括写嵌入式,写javascript以及写大型项目对性能要求极高的人(即使是大型项目也可以80%用python,20%用C),当然还有就是java和C++的重度患者。(完全使用XX工作意思不是所有人都完全使用XX工作”!显然只是部分人。更多的是,非专业编程但是想提高效率的人。比如之前有篇完全使用*nix工作,C#,ios开发的人显然就一下也不能用。对于我,linux再好我也只能装在老电脑上交交CS225的作业。当我把mint,opensuse,archlinux装遍了,下一步就是gentoo了的时候,否决它只有一条理由,我笔记本电池不经用,而桌面linux的电源管理......感谢我的cpu风扇~!)首先,我想说的是,为什么不用下面这些大部分人很熟悉的语言:1.C:你难道指针扎得不疼么?每天收垃圾很舒服?键盘上P右边两个键是不是已经按坏了?2.C++:学C++三年以内请不要说你会C++;学了三年以上的人,恭喜你们,你过去几年浪费的时间我可以拿着香飘飘环绕地球一圈了.3.Java:不好意思,Java的面向对象对我来说是原子弹打原子。而且Java7才引进Lambda表达式实在是太晚了,即使java以后会跟python越来越像,至于支持真正的函数式编程?我希望下个末日之前可以实现.而且有时候我确实需要单行执行的解释器而Java并没有。4.Ruby:Ruby很好,但是你为什么不直接说你只是为了用RoR?5.Lisp:如果你用lisp,你平时肯定会用python或者perl写脚本。而且你会Lisp不去拯救世界还来看这篇文章干什么?!抽象语法树什么的最讨厌了....6.Perl:我第一次看Perl的代码就感觉像用脚写的.为什么满屏的正则表达式?!7.C#,php,javascript:呵呵。8.Shell:这算语言么?9.Matlab:第一,我穷酸学生没钱每年买你的正版,看到激活码就想吐。第二,我不想心血来潮画两个心形函数的时候用1mb的窄带花两天下个5.03Gb的文件在我128Gb的固态硬盘里装,然后用完两个小时就删,如此循环。第三,我会python了不想再花时间学你的sb语法,熟悉你的.m文件。第四,所有对windows的垄断的血泪控诉都直接对mathwork转过来吧~什么对开源,对自由,对的打击信仰~绝对适用~第五,python大部分时候如果不比你好用至少跟你一样好用,而这只是它不到10%的功能,几个程序员业余时间写出来的库。真心请matlab你这个没事发邮件“培训一个星期2000刀打折700刀”的大公司滚粗。10.Haskell:每次想静下心来学haskell都会情不自禁从范畴论看起....对于单纯程序语言的使用者来说,用途(内在逻辑)大于一切不必要的语言细节。比如我就想建个数组放东西,为什么我要懂内存回收?!所以在易用性方面,Python相对于他们作了很大改进的部分。好吧,你会说Python没有缺点么。确实有,而且很严重,那就是运行慢。而且是慢出风格,慢出自信。(Python3比Python2慢15%以上,这是一种什么风格!)相同的程序Python比C慢几百倍很正常。这让Python的发展受到很多限制。但是对于个人使用来说这个缺点完全不属于缺点。第一,这个年代谁没有奔腾酷睿2什么的。你手机的运行能力都可以几毫秒内把你在厕所拍的几千张自拍液化,磨皮,磨骨好几遍了。而且你觉得0.01秒和0.5秒的区别真的那么大么?12秒也不是很久啊。第二,很大程度上程序的慢更关乎于算法,比起O(n)和O(n^2)的区别,语言间的差异就显得很小了,第三,请注意,如果你使用过Python而且真实的觉得Python慢,那么情看下这个列表:1.Google创立前的第一个网络爬虫。2.Quora,美国最大在线知识问答平台,开复哥总是在上面拽文的。3.Dropbox。4.Youtube5.BT。6.知乎,中国的Quora。7.豆瓣,开创社交工具绿色系代表yp的先河。你知道我要说什么了。.....恩~他们有一个共同点~------------都是Python写的!如果tmd的Dropbox没有觉得Python慢,请你也有足够的信心不要觉得Python慢。另外八卦一下,现在Python之父前两天从google去Dropbox了,这是很值得自豪的事,值得Dropbox为之自豪。Python是荷兰人vanRossum1991年开发完成的脚本解释语言。起这个脑缺的名字是因为他是一个叫做MontyPython的脑缺喜剧团体的脑残粉(BTW,MontyPython出演的巨蟒与圣杯是英国电影史上跟大话西游同样地位的喜剧,其中亚瑟王被黑成了炭,里面圆桌骑士们拿着块石头敲来敲去各处蹦达着,看影评我才知道这是表示他们在骑马%&……×().于是人们知道以这么脑残的名字取的语言不是像brainfuck语言一样是brainfucker,那么就会像莫里盖尔曼以乔伊斯“芬尼根的守夜人”中虚构名词来命名的夸克一样,成为一个一个不朽的新创造。Python显然属于后者。接下来,说正题,为什么Python如此先进(对于初学者)。代码简洁性和可读性写过helloworld,helloandroid,hello**的人都知道,学语言最好的途径就是写和读(即使是学书面的自然语言)。所以代码的可读性是选择学一门语言的关键因素,因为你代以后会花很多时间读别人的代码。可读性带来的影响是非常深远的。有种说法,说在遥远的古代阿拉伯数字传入之前欧洲之前,其数学发展几乎为0,而造成这种缓慢的原因就是因为复杂的罗马数字的广泛使用。这表明很多时候即使我们不愿意承认,往往是形式决定的内容.比如罗马数字没有0,自然很多数学概念就难以发展.没有流形也不可能发展广义相对论一样.所以............如果想以后从此过上幸福的生活,请不要选用perl.如果不幸选择了perl,那么就君就一入侯门深似海,从此萧郎是路人了。当以后你两行清泪的看着自己十天前写的不过10几行的楔形文字时,你就会明白.而Python的可读性是我见过最好的:1.Python的代码格式使用缩进而不是括号。首先节省了很多行数,变得而为紧凑,而美观.相传的俄罗斯人偷美国NASA的C代码那个段子满屏括号的情况是不可能出现Python版本的.第二,逻辑相当清晰.循环的结束与开始一目了然.第三,屏幕右方得到充分利用.比如使用24寸屏幕的人是不是感觉自己总是望着左边编程.....和17寸等高的屏幕区别不大,很费右边的电.比如,这是某个C用来图像采样的算法的代码:好吧,很带萌感,画风也很不错.但是Python也不是写不出混乱的代码,或者说只要有一定自由性的语言就可以写出。比如没事写个(PseudoCode):booleanAlwaysTrue=False;或者intMagicNumber=42;什么的。这个是Python版,完全不符合Python哲学。Python的思想上面一点是语言形式的,C也可以改成缩进,所以此项不是核心优势.而使用一门语言是使用它的思想.于是要谈到Python的哲学,TheZenofPython.在python命令行里输入importthis可以看到,:Beautifulisbetterthanugly.美优于丑Explicitisbetterthanimplicit.晰胜于浑Simpleisbetterthancomplex.简胜于繁Complexisbetterthancomplicated.繁胜于杂Flatisbetterthannested.平胜于嵌Sparseisbetterthandense.稀胜于稠Readabilitycounts.可读至上Specialcasesaren'tspecialenoughtobreaktherules.殊例不足违训Althoughpracticalitybeatspurity.虽实用大于纯粹Errorsshouldneverpasssilently.谬不可疏Unlessexplicitlysilenced.除明示Inthefaceofambiguity,refusethetemptationtoguess.晦不存疑Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.一法万用Althoughthatwaymaynotbeobviousatfirstunlessyou'reDutch.若非尼德兰红毛,法难定(......科学没有国籍)Nowisbetterthannever.今胜于无Althoughneverisoftenbetterthan*right*now.无胜于促Iftheimplementationishardtoexplain,it'sabadidea.难述其施,谬法也Iftheimplementationiseasytoexplain,itmaybeagoodidea.其施可述,或可行Namespacesareonehonkinggreatidea--let'sdomoreofthose!命名空间,多多益善如果觉得俺翻译得太烂可以看英文.但是你看到一个物品/工具/器件/用品的设计理念是如上时,除开认为设计者装逼之外,必定会觉得这个工具是十分可靠,清爽的.首先看到这个蹩脚的诗我就想到的是Unix伟大的亲嘴原则(KeepItSimpleandStupid),而Python的确如此。(部分)解读如下:美优于丑。我只想举一个例子,你们感受一下(哈哈哈哈)。学C语言写辗转相除的novice们先include你的stdio去吧:-----defgcd(x,y):whiley:x,y=y,x%yreturnx----明晰胜于浑晦:Python逻辑与或用and和or而不是&&和||简胜于繁,繁胜于杂,平胜于嵌,稀胜于稠可读至上:分别用C和Python写个helloworld就能明白。特例不足违反规则:这句话最好的例子是Python没有char类型。因为大伙儿认为char只是一位的字符串。实用大于纯粹:于是Python里有chr().谬不可疏除明示:有时候exception还是重要的晦不存疑,一法万用:1.与其用iterator,for循环,指针移动,数组下标移动,不如一个for...in...直接解决问题。2.list,dict和tuple的数据结构也是希望能适用于绝大部分场合。这三位可以在必要的时候变成:列表,栈,队列,哈希表,七七八八各种东西....3.函数的参数也勉强可以算进来。利用*和**,python的函数参数灵活性无以复加。若非尼
本文标题:强大的Python--完全用Python工作
链接地址:https://www.777doc.com/doc-4254165 .html