Python是如此活跃的一种语言,几乎伴随互联网的发生而创立,又伴随互联网的极速发展而繁荣。使用Python会遇到这样的问题:何时该用多进程?怎样提升代码执行效率?Flask为何流行?学习Python要不要直接学Python 3? Python 3有哪些优势,迁移成本如何?豆瓣这种大厂对Python有何见解?css
所以咱们 OSC 第 128 期高手问答请来了豆瓣工程师为你们解答关于Python的相关问题。本文挑选了部分精彩的问答内容,分享给各位交流、学习。也能够转到原连接继续浏览。html
Q:Python确实愈来愈火了,知乎就是Python作的,偶尔搞了一点,发现确实很高级,至少比Java语言高级一些,某些功能Java须要写100行,而Python可能只要20行。作一些外维系统仍是挺方便的,好比日志的提取等,以前学的是2.7版本,如今Python3比以前的版本有哪些新特性呢?node
A:Python 3是至关于站在Python2的肩膀上,摒弃了早年设计Python 2的错误思想(因此有的地方向前不兼容),加了一些新的语法,好比asyncio,甚至type hint(我不喜欢)。 具体的内容能够看 https://docs.python.org/3/whatsnew/index.html。 整体上和Python 2区别不大。不用纠结Python 2/3python
Q: 我惟一关心的是Python如今进入Python3时代了吗?我如今的Macbook上默认装的仍然是Python 2.7。做为新手,这种时候来学Python总以为很尴尬。难以抉择从哪一个版本开始。react
A:编程重在编程思想的理解和经验积累,语法其实只是表达方式而已,Python 2/3思想是相通的,只有少许语法差异和不兼容。对Python熟悉到必定程度能够在很短期写Python 3。书中还说了更细的选择建议。Python 3是将来,可是如今潮流尚未来,因此不用有太大的担忧。我我的以为Python 2会在至关长时间内存在,维护老的项目还须要写Python2/3兼容的代码。webpack
Q:做为一个打算学习Python的新手,首先想知道目前或者说最近两年Python2.7更为主流,更适合新手学习,仍是Python3.0?其实咱们都知道Python语言极其简洁优美,实现相同功能代码要比C++少太多,那为何C++的普及程度要比Python高这么多?nginx
A:有很是多的人建议直接学Python3,我并不认同。由于并非2020年到了Python 2就会死掉。新手学习选2仍是3我却是以为无所谓,关键是真的去学,而不是纠结。其实你如今不管先学那个,到Python 3的潮流到来的时候,去兼容2仍是迈入3都很容易。 好比我,并没看过Py 3的书或者文档,可是靠着对Python的理解,现场翻文档查Google就能够写Python 3的效果,并不花费更多精力。
C++有很深的历史缘由,尤为是在中国。Python其实也就是最近3-5年的事, 并且一个语言的使用广度和使用它的公司和人有关,一个厂使用XXX,他们离职出来创业或者去其余公司仍是用XXX,这种毒药同样的方式蔓延开来,势不可挡啊。反观Python,更像是一些人中意的小玩具,就是那么一拨人喜欢。就算Python作的再好,BAT也不会替换成Python,由于老的东西已经作得不错了,为啥要换呢?git
Q:Python3在好久之前就出来了。到如今还没成为主要版本程序员
A:是的。这实际上是有历史遗留问题的。目前看来Python 3并无什么足够的优点和吸引力让你们火烧眉毛的升级。你们也都采起观望的态度。并且目前在国内甚至国外都没有看到2to3的一些真的好的经验。可是继续关注吧,这个潮流预计1-2年就会出现了github
Q:我记得2009年就存在这个问题,如今都过去7年多了,仍是这个情况,难免让人等得有些郁闷。
A:如今已经改善了不少。刚出3的时候,别说咱们开发者,就是Python社区,包含一些核心开发者也是有意见的。如今你们已经有个共识,就是Python3是将来。
Q:Python 3 和 2 到底哪个在互联网行业产品中用的多,初学者怎么选择?
A:目前还没听过那个相对有点名气的产品宣称用Python3。 预计在明后年会有少量。 通常的企业也不会就为了用Python 3,而让那些跑了可能10多年,几十万行代码的项目必须迁移(这不符合KPI啊,boss那里说不过去),其实最多就是在新的项目上用Python 3,老的项目仍是维持现状。 若是如今是2018年,我建议直接学Python3,若是是如今,哪一个均可以。
Q:学Python2 好仍是Python3好呢,哪一个更好向后面的python版本过渡?
A:Python 3是将来,这个是毋庸置疑。 只是目前看潮流尚未到。并且各大公司对Python 3兴趣也不大,包括我。前面的答案说过一些,总结下就是若是如今到了2018,首选Python3,不然选哪一个都无所谓。关键是要去练,而不是在纠结。
没错,编程重在编程思想的理解和经验积累,语法其实只是表达方式而已,Python 2/3思想是相通的,关键是要去练,去使用,不用纠结Python 2/3。
Q:Python的Web开发方向,须要学习哪些重要技术?
A:Web开发有不少方便,好比Web框架,Python语言,系统架构等等。你从零开始作一个大型的网站应用就知道了。个人书算是给你划了一个比较完成的图。
Q:Python Web 开发一个比较好的学习路线是怎样的?
A:我在知乎回答过一个Flask学习的路线,供你参考: https://www.zhihu.com/question/20135205/answer/123224570?group_id=764428290671783936 其实万变不离其宗。
Q:初入门Python,有C、Java基础。再看《Python基础教程(第二版)》。请问您有推荐的书籍吗?
A:我我的在知乎专栏写过一篇推荐书的文章 https://zhuanlan.zhihu.com/p/22198827。我建议有一些其余语言基础的同窗好好地看看《Python学习手册》,若是你英语比较好,建议直接看原著。《Python基础教程》虽然是一个经典的入门教程,写做风格也相对轻松幽默,可是因为本书写做于2010年,书中有大量内容已通过时,因此不推荐!
Q:请问你目前最好的入门书是那本?有没有和PHP或者其余语言对比讲Python的呢?
A:我认为最好的入门书是《Python 学习手册》和 《"笨办法"学Python》。 不懂「这个世界上最好的语言」,因此不知道,并且一个新的语言有本身的理解,为啥要对照其余语言看呢,你在学习过程当中不断的思考和领悟,偶尔发出:额 原来这个就是XX语言的YY啊。 这样很差么?
Q:做为10多年IT从业人士,已经不想也用不到学具体的开发了,可是想经过Python这几类Web框架了解下Python Web开发的精华,在这种目的下,哪一种框架更适合呢,或者说大致都一致?
A:Flask,一天可上手。代码质量也很高。
Q:最近自学Python,想作Python Web开发,感受遇到瓶颈了。网上的教程不是太详细,只能本身一点点照着框架的文档去尝试,一个简单的问题可能要很长时间才能解决,好崩溃。感受好难啊。谁有这方面的经验,但愿多分享下,交流下。
A:这是一个新手到高手的过程。这个世界没有那么多不付出努力就能收获颇丰的机会。在我工做不久,参与屡次公司季度、年度会议无一中奖的时候我就意识到了。 因此,你想成为何人,你就要付出相匹配的努力和代价。 我是非计算机专业专科毕业,专业叫作《烹饪工艺与养分》。我英语水平也没过四级(专科不考),并且我自认为是一个资质平平的人。和别人不同的就是舍得花时间,愿意坚持有兴趣,和你们共勉吧。
Q:不知做者有没有涉及过大数据方向的?我看部分大数据相关的都要用到Python这是为何?Hadoop整个生态圈都是Java的,Python的定位是什么?
A:在NLP,算法,推荐,数据挖掘,神经网络,机器学习,深度学习等领域都有很是好的现成的Python的库, 如NTLK,Theano,Tensorflow,scikit-learn,以及作数据分析的NumPy和Pandas。 学术界和科学家们还特别偏好Juypter/iPython。对一些经常使用的统计和算法使用Python显然很方便,验证起来也很方便。 Python的优点不在于运行效率,而在于开发效率和可维护性。
Python一直被称为胶水语言,基本各个领域都有所涉猎。学习一下没有坏处。
Q:其实我是一个狂热的Python爱好者,可是仍是想问:
用Python来进行Web开发,与它的其余竞争者相比,有什么优点呢?好比,与Ruby On Rails相比,它能更敏捷(快速)地开发,用写尽可能少的代码来完成任务吗?与Node.js和Golang相比,它在支持高并发、多线程、执行性能等方面有什么优点吗?若是一些性能方面的优化能够经过编写C扩展模块,或者经过cffi、Boost.Python、Cython等方式进行优化,Node.js、Ruby等一样能够作到。一句话归纳上面的问题就是:是什么缘由吸引咱们使用Python来进行Web开发呢?
A:ROR我倒没有实际的用过,不敢妄言。Python最大的优点是他是一个「胶水」语言,在工做中的各个方向都能看到Python对应的库的身影,学会Python会让你的路比较宽,可是用ruby,可能在我印象里面就是Web开发比较有名。我如今尚未发现作Web开发有比Python效率高的方式。
其实不少人都担忧Python的执行效率,然而其实绝大多数状况Python足够快,不快的话要先看看本身是否是用得不对或者很差。如今硬件资源很廉价,除非上升到BAT那种规模,不然基本尚未到达讨论语言瓶颈的问题。如今豆瓣绝大多数基础设施都是使用Python开发的。在Web开发中,咱们不多经过写扩展的方式提升性能,其实编程语言通常都不是网站性能的瓶颈,还能够经过其余方式解决。
Q:以前学ROR是由于老师要求用这个,我没有用Python进行Web开发的经验,稍微有一点了解的也只是Flask或者Falcon这种轻量级的,感受可以快速开发小巧的应用,可是不知道有哪一个特别出名的应用或者网站系统是由Python开发的(好比WordPress和Discuz用的PHP,Gitlab用的Ruby,OSC好像用的是Java吧)。Python确实是一种比较万能的语言,但有点万金油却不够专精的感受。好比在科学计算方面很流行,可是论效率不如Julia,论支持库的丰富和使用普遍度不如Matlab(特别是学校里面,教授作研究或者教学通常都会用Matlab);在系统管理方面看,能用Python干的脚本化工做,用shell或者perl基本上都能干,并且须要写的代码行数说不定更少。若是说用Python进行Web开发效率高,是有特指某一个框架吗,仍是泛指?
我在写程序时首先会想到用Python,是由于喜欢tial-and-error这种方式,可以在正式写代码前确认想法能不能实现,可以让我有兴趣和信心继续下去。但真要提及来,可以提供REPL特性的语言也很多。
Python的执行效率貌似永远是Python热门的讨论话题,好比GIL的存在必需要用特殊的方式来优化。像gevent和Tornado之类的存在也适用于高并发的网络链接(不过Python在这方面的性能不必定是最高的,没有看过相关的测试)。再说Python的实现,除了最出名的CPython和PyPy以外,甚至还有为嵌入式设备开发的MicroPython(这也在另外一方面说明了Python的万能性)。Dropbox的技术栈中也使用了Python,而且有开发面向性能的Python实现pyston,此外还有Stackless Python(听名字感受很厉害,虽然其实我并无去了解这究竟是什么),但它家也在用Golang和Rust开发高性能的东西。那么,豆瓣的基础设施实现中,用Python开发的应用效率如何?也有使用除了CPython以外的实现来进行优化吗?(我是否是扯得有点偏题了?)
A:嚯,你的问题好长。 进行Web开发效率高算是泛指,包含Django和Flask。效率高也体如今它们的第三方扩展和支持比较完善,基本能想到的都有对应的项目支持,这样少造了不少轮子。 豆瓣天天服务着千万级别的用户(抱歉不能说具体数字)的请求,绝大多数应用和基础设施都是Python实现的。因此应用效率不用担忧。虽然可使用C/C++的扩展提升运行效率,可是我接触的场景里面不多。至关于写扩展的维护性和成本,你们更愿意从架构,算法等方面来解决。
Q:按照“没有银弹”一说,Python应该也有本身的适用范围吧,是否是比较适用于机器学习,不适合于Web开发呢?
A:Python被称为「胶水语言」,虽然没有「统治」哪一个领域,可是基本上个个领域都把手伸了进去。机器学习我不熟不敢妄谈是否是更合适。我只能说,Python很适合Web开发。
Q:Python Web相对Java Web有什么特别明显的优点吗,在运行机理上,应该仍是Java的性能又好一些
A:选择Python是由于他的开发效率和高可维护性。并且Python绝大多数状况足够快,足够快。就算不够快,如今互联网公司也有不少解决方案。其实一个网站基本不受限于编程语言的限制,每每是数据库,存储等等方便会遇到瓶颈。大部分是网站设计的架构有问题,或者写Web用的不对或者很差。Python表示很无辜。
Q:大神您当初建站的时候为啥要选择Python这门语言,开发Web Python与Java、PHP之间有什么异同?
A:其实我也使用Node.js/Golang写过Web,可是我的都以为没有Python喜欢和熟悉。 我以为当初选择他而且坚持下来,第一是开发效率和上手速度,基本熟手花一周一个功能齐备的网站就作好了,Java我比较担忧。实际上是语言的使用范围,PHP好像就是作Web开发,太窄,我仍是喜欢用一个语言掌控这个产品流程。
Q:能分享下大家那是怎么完成网页组件化的吗?组件化须要考虑CSS,JS的引入问题。如今ng,React之类的Web框架能很好的解决这个问题。大家都是怎么来管理?
A:咱们的React组件化大部分是使用inline-styles(https://facebook.github.io/react/tips/inline-styles.html)。可是有一些通用的样式使用css-loader。豆瓣的基础设施能够帮助项目自动「翻译」ES6的JS代码。同时也会使用webpack打包和压缩成完整的JS文件。
Q:我如今在用Python写爬虫,有什么好的建议?数据量大了有什么好的处理方式?
A:爬虫是Python领域中一个很简单的活儿,其实主要是防爬和提升爬取速度,这个爬取速度不在你使用多线程仍是多进程仍是asyncio,而是待爬的网站对你的容忍度和你具有的对应策略。 数据量大的建议这个话题很大,主要是要设计好数据库和存储的方式。
Q:你好, 用Python最大的好处是实用库多,无论是写服务器仍是写爬虫都有库,不过就Web开发来讲感受最麻烦的就是想找到一个方法快速入门一个框架,毕竟如今各类框架变化太快,一会Django一会Flask,在这些框架的选择上应该如何权衡呢?是只掌握一个就够了仍是应该多看几个呢?还有就是在Python Web 开发过程当中 是否适合使用多线程的框架来响应请求呢?由于感受Java Web开发很看重多线程的使用,不过Java Web感受棘手的一个缘由是重,而后是须要编译,最后是垃圾回收一搞很差就容易大量吃内存CPU,在使用Python Web开发的时候如何避免出现相似Java Web开发的那种状况,谢谢。
A:我建议一个领域学好一个就能够了。好比学Web框架,其实若是工做中没有使用,学习Flask就够了,等你学好了,再看Django其实也很容易,由于精髓就那些,只是不一样框架的实现的方式和解决方案不一样罢了。固然 先学Django也是能够的,只是学习曲线高了一些。
响应请求有业界的标准解决方案,好比 nginx+ gunicorn, 具体到是否使用多线程,或者使用多少仍是和你的业务有关,你基本不用操心。 Python很是稳定,并且帮你完成回收,若是你发现很吃内存或者CPU,通常都是写的逻辑有漏洞。
Q:为何您当初选择了呆板的Python而不是活力的Ruby?Python比起Ruby的优点是什么?
A:没看出来Ruby多有活力,而Python呆板。我看到的只是Python开发者在给各个领域贡献优秀的库,只是不出来宣传。就像我在以前的公司。11个产品线,8个ruby的,1个node的和2个python。Ruby的整天在公司邮件组抄,Node的偶尔去混战,只有咱们Python的啥也不说,作好本身。固然 在国内,开发者也是Ruby的更活跃。我所知的那些厉害的Python领域的老师和专家历来不出来。好比Python,只有洪教授一人会出去,你们都不参与而已。我也喜欢这种低调的生活。
Q:这本书不是入门书籍吧?我看定位是进阶读者,从目录上看是介绍了Python Web的生态,还有各类包及编程技巧,这本书有没有围绕着一个项目构建组织全书呢?有点期待想看。
A:书中是有一个完整的例子的 是一个文件托管服务, 效果相似这样 https://vast-brushlands-4477.herokuapp.com/(在国外,因此慢)。有人把我这本书当成百科全书或者讲生态的我都不反对,我我的的理解像是大学老师在给划重点,讲其中的起因,可是具体的还得去用,去看官方文档。这本书其实不算进阶吧,属于有必定Python使用经验的人就能够看,书的内容也是我故意不喜欢关系太紧密。好比你能够直接看第十章,前9章基本不用看也是能够的。
Q:已经买了做者的书,感受比较有深度,就是有些代码用的Python2,如今迁移到Python3有时候就迷乱了。还有就是做者能够简单介绍下Python如何链接其余语言的C++和Node以及其余的Go还有C#之类的。
A:嗯,Python 分2和3是很尴尬,我也想全书用Python 3,可是因为有「实战」的意味,担忧不少尚未迁移到Python3的同窗用不了。随意忍痛仍是用如今的主流Python2。假如如今已是2018年,个人书绝对是纯纯的Python3。C++和C#的内容确实没有,恕我没有相关的经验,也没机会去实验,就不写了。 在异构的场景我更喜欢服务化,用JSON或者一些自有的二进制协议通讯。
Q:Python Web 开发相对Java Web 有什么优点?
A:前面已经说过了。并且我没用Java写过Web,不敢深刻的评价。有时候性能和开发效率以及维护成本要看场景,Java Web发展到近来有它存在的必然因素,其实不必比。
Q:本身一直用Django作Web开发,可是老是有一些困惑在于更新很频繁。您有没有一些较好的Django公共组件推荐?快速开发的同时,能够学习别人是怎么实现。如今先后端分离比较多,您认为Django的MVC和使用Restapi作先后端分离,怎么选择合适?谢谢!
A:我的不喜欢Django,因此用的很少,尤为是最近1-2年,因此就不推荐了。MVC和Restapi也不冲突啊,一个是项目的架构方式,一个是接口定义的模式约束。
Q:感受Django就是版本帝各类改变接口等……又不向下兼容,我这种业余写点程序的追起来心累
A:嗯 我以前用1.2.5,后来改为1.4,结果密码加密方式改了,害得我只能用低版本升不了级(总不能让全部用户都来重置一遍密码吧)
Q:我自学过一段时间的Django,后来研究小米的开源监控系统,才了解到的Flask,如今正在研究Flask,对于Python进行Web开发,您是怎样看这些框架,他们都适合什么样的环境,还有其余的框架推荐吗?谢谢
A:用Flask仍是Django可能更是工程师按性格。Flask是力求简单,只保留核心,你想要什么往里面填,给你自由,缺点是这些扩展参差不齐,须要你用有必定的辨别的能力。Django是五脏俱全,大部分经常使用的啥都给你准备好了,用就行了,缺点是自由度不够,你想定制点仍是要费一番周章的。学习曲线也是flask基本一天就可上手能用,Django也许得2周,越到最后越难(可是也别被我吓到,只是从初学者的角度看)。 其实我我的比较喜欢Pyramid,可是只推荐给有必定Python Web开发经验的人,有时候得翻源码解决问题或者找思路和灵感。
Q:您好,比较火的Web框架不少,常见的有Flask, Django, Tornado,这三个东西在开发上有什么异同,或者说若是开发一些Restful接口或少许界面的功能,优先考虑哪一个?还有就是Python的部署只是把脚本放上去就好了,但环境还要本身配置,有什么方法能像Java那样打包部署么?
A:不一样的框架就是实现的思路,做者或者团队的编程习惯不同,造就它们的用法看起来差异挺大,生态区别也很大,但事实上原理都差很少。不要问我选哪一个,我确定说Flask,由于我的喜欢Flask的哲学(精简,自由,高效,代码写的好等等),可是你仍是要有本身喜爱。 Python没有像Java那样打包,这是不一样语言的设计哲学。我我的愿意花时间折腾,因此我喜欢Python!!
Q:你好,我学了快一年的Python,对Python的异步感到比较困惑,Python有多种方式能够实现异步,事件循环、协程、多进程多线程什么的,相关框架也是不少,gevent、twist、tornado,asyncio等等,真是有点眼花缭乱,像NodeJS就比较单一(貌似它的异步就是event loop),因此我想问问你以为Python到底适不适合作异步编程?若是要学习Python的异步编程如何入手好一点呢?
A:说适不适合很奇怪,讨论「某个场景下用哪一个(些)方式更适合」这样的话题比较好。并且这些看起来比较让人眼晕的概念其余语言也都有,只是可能名字改一下,换汤不换药,这也是学好一本语言再学其余的会很容易的缘由吧。编程其实很无聊,写好的库,明确告诉你该怎么用,你直接调用就行了。其实写代码不难,关键是要深入理解这些概念的原理和适用场景,这种资料一搜一大堆..... 除了看书,分别用用,加点调试代码(好比print),看看他是否是按照你理解的方式在运行,想一想为何。有过几回实战经验就懂了。
Q:运维转开发运维有什么好建议? 学习路径能推荐下吗? 核心编程能力就想依靠Python
A:我就是运维转运维开发,最后成为了Web开发。这条路上和核心编程没什么关系,都是靠工做中去锻炼。我在运维转运维开发的时候,其实已经拿到某大厂的运维的offer,可是一心要作开发。当时说的是哪怕被我一半的薪水我也愿意作开发。 看书看博客只是辅导,实操才最重要。
Q:这个本书有没有涉及Docker,请问你对Docker在Python Web应用部署方面有什么见解,是否会获得大规模的应用呢 ?
A:只涉及使用Docker运行能包含了本书绝大部分代码的引导。没有把它做为书中的内容,由于第一个是和Web开发无关,第二是Docker不是Python实现的。如今Docker已经火的不要不要的,透露下,其实豆瓣现有的产品的部署都已经使用Docker了。
Q:了解Python基本知识,但愿学习一门Python web框架学习后端开发。以前我对部分主流框架进行了一些了解:Django,Tornado,在知乎上有一个很是活跃的群体。在框架的选择问题上,只有最适合你本身、最适合你的团队的框架。编程语言选择也是一个道理,你的团队Python最熟就用Python好了,其实大部分人是不必太关心框架的性能的,由于你开发的网站根本就是个小站,能上1万的IP的网站已经很少了,上10万的更是不多不多。在没有必定的访问量前谈性能实际上是没有多大意义的,由于你的CPU和内存一直就闲着呢。并且语言和框架通常也不会是性能瓶颈,性能问题最常出如今数据库访问和文件读写上。
A:嗯 赞同你的观点。不少人在杞人忧天。先等活到有必要讨论语言的那一天,那时候早就有钱有人有时间,哪怕Python真的不知足,重构呗。
Q:使用豆瓣不少年,很喜欢豆瓣的风格。以前一直是在网页端浏览,后来又到了手机app端。我整体感受豆瓣的进步很快。我想问的问题是,Python Web一直做为豆瓣的开发首选,是由于什么?还有关于豆瓣的权限模块的设计时,Python Web发挥了什么优点。做为手机端app的开发,Python Web会起到什么做用吗?
A:豆瓣选择Python,实际上是公司和语言的风格很类似的缘故吧。咱们作事喜欢优雅,清晰,高效,这正好也是Python但愿的。 豆瓣的基础设施基本都是使用Python完成,包含权限部分,可是Python Web和权限模块设计感受没啥直接的关系,就是抽出来的库和使用它的关系,我也没懂有什么优点或者劣势。 豆瓣app的API后端是使用PythonWeb完成的。
Q:Python的Web开发框架有不少,豆瓣用的是哪一个呢,为何选这个呢?
A:用户产品绝大多数使用定制版的 http://quixote.ca/。 选择它有一些历史缘由。那时没有更好的框架。并且用了这么久,够用,简单,性能知足需求,就不必换。固然如今厂内其它框架也都有在用。