未加星标

豆瓣高级Python工程师毫无保留分享,看过都点赞

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

豆瓣高级Python工程师毫无保留分享,看过都点赞

python是如此活跃的一种语言,几乎伴随互联网的发生而创立,又伴随互联网的极速发展而繁荣。使用Python会遇到这样的问题:什么时候该用多进程?怎样提高代码执行效率?Flask为什么流行?学习Python要不要直接学Python3?Python3有哪些优点,迁移成本如何?豆瓣这种大厂对Python有何看法?

因此我们 OSC 第 128 期高手问答请来了豆瓣工程师为大家解答关于Python的相关问题。本文挑选了部分精彩的问答内容,分享给各位交流、学习。也可以转到原链接继续浏览。

(一)版本选择―― Python 3 发布也有很长的时间了,但现在业界的主流好像还是使用Python 2。因此有不少程序员在纠结是选用Python 2还是Python 3,董伟明老师给出了自己的看法。 Q:Python确实越来越火了,知乎就是Python做的,偶尔搞了一点,发现确实很高级,至少比Java语言高级一些,某些功能Java需要写100行,而Python可能只要20行。做一些外维系统还是挺方便的,比如日志的提取等,之前学的是2.7版本,现在Python3比之前的版本有哪些新特性呢?

A:Python 3是相当于站在Python2的肩膀上,摒弃了早年设计Python 2的错误思想(所以有的地方向前不兼容),加了一些新的语法,比如asyncio,甚至type hint(我不喜欢)。 具体的内容可以看 https://docs.python.org/3/whatsnew/index.html 。 总体上和Python 2区别不大。不用纠结Python 2/3

Q: 我唯一关心的是Python现在进入Python3时代了吗?我现在的Macbook上默认装的仍然是Python 2.7。作为新手,这种时候来学Python总觉得很尴尬。难以抉择从哪个版本开始。

A:编程重在编程思想的理解和经验积累,语法其实只是表达方式而已,Python 2/3思想是相通的,只有少量语法差别和不兼容。对Python熟悉到一定程度可以在很短时间写Python 3。书中还说了更细的选择建议。Python 3是未来,但是现在潮流还没有来,所以不用有太大的担心。我个人觉得Python 2会在相当长时间内存在,维护老的项目还需要写Python2/3兼容的代码。

Q:作为一个打算学习Python的新手,首先想知道目前或者说最近两年Python2.7更为主流,更适合新手学习,还是Python3.0?其实我们都知道Python语言极其简洁优美,实现相同功能代码要比C++少太多,那为什么C++的普及程度要比Python高这么多?

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,因为老的东西已经做得不错了,为啥要换呢?

Q:Python3在很久以前就出来了。到现在还没成为主要版本

A:是的。这其实是有历史遗留问题的。目前看来Python 3并没有什么足够的优势和吸引力让大家迫不及待的升级。大家也都采取观望的态度。而且目前在国内甚至国外都没有看到2to3的一些真的好的经验。但是继续关注吧,这个潮流预计1-2年就会出现了

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。

(二)入门相关――初识Python,总有些迷茫,该选择如何选择方向、制定学习路线,这里有一些经验分享给新手。 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:这是一个新手到高手的过程。这个世界没有那么多不付出努力就能收获颇丰的机会。在我工作不久,参与多次公司季度、年度会议无一中奖的时候我就意识到了。 所以,你想成为什么人,你就要付出相匹配的努力和代价。 我是非计算机专业专科毕业,专业叫做《烹饪工艺与营养》。我英语水平也没过四级(专科不考),而且我自认为是一个资质平平的人。和别人不一样的就是舍得花时间,愿意坚持有兴趣,和大家共勉吧。

(三)使用Python进行开发的程序员也会遇到一些困惑,这里整理有关使用Python 进行Web开发的一些问题,包含了性能、适用范围、开发效率、框架选择和使用、运维相关等内容。 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+ gunic

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

主题: Web开发PythonJavaC++PHPDjango算法Node.jsRuby其实
分页:12
转载请注明
本文标题:豆瓣高级Python工程师毫无保留分享,看过都点赞
本站链接:http://www.codesec.net/view/481949.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(81)