Python是如此活跃的一种语言,几乎伴随互联网的发生而创立,又伴随互联网的极速发展而繁荣。使用Python会遇到这样的问题:什么时候该用多进程?怎样提高代码执行效率?Flask为什么流行?学习Python要不要直接学Python 3? Python 3有哪些优点,迁移成本如何?豆瓣这种大厂对Python有何看法?
因此我们 OSC 第 128 期高手问答请来了豆瓣工程师为大家解答关于Python的相关问题。本文挑选了部分精彩的问答内容,分享给各位交流、学习。也可以转到原链接继续浏览。
(一)版本选择——Python 3 发布也有很长的时间了,但现在业界的主流好像还是使用Python 2。因此有不少程序员在纠结是选用Python 2还是Python 3,董伟明老师给出了自己的看法。
Q:Python确实越来越火了,知乎就是Python做的,偶尔搞了一点,发现确实很高级,至少比Java语言高级一些,某些功能Java需要写100行,而Python可能只要20行。做一些外维系统还是挺方便的,比如日志的提取等,之前学的是2.7版本,现在Python3比之前的版本有哪些新特性呢?
Q: 我唯一关心的是Python现在进入Python3时代了吗?我现在的Macbook上默认装的仍然是Python 2.7。作为新手,这种时候来学Python总觉得很尴尬。难以抉择从哪个版本开始。
Q:作为一个打算学习Python的新手,首先想知道目前或者说最近两年Python2.7更为主流,更适合新手学习,还是Python3.0?其实我们都知道Python语言极其简洁优美,实现相同功能代码要比C++少太多,那为什么C++的普及程度要比Python高这么多?
Q:Python3在很久以前就出来了。到现在还没成为主要版本
Q:我记得2009年就存在这个问题,现在都过去7年多了,还是这个状况,不免让人等得有些郁闷。
Q:Python 3 和 2 到底哪一个在互联网行业产品中用的多,初学者怎么选择?
Q:学Python2 好还是Python3好呢,哪个更好向后面的python版本过渡?
没错,编程重在编程思想的理解和经验积累,语法其实只是表达方式而已,Python 2/3思想是相通的,关键是要去练,去使用,不用纠结Python 2/3。
(二)入门相关——初识Python,总有些迷茫,该选择如何选择方向、制定学习路线,这里有一些经验分享给新手。
Q:Python的Web开发方向,需要学习哪些重要技术?
Q:Python Web 开发一个比较好的学习路线是怎样的?
Q:初入门Python,有C、Java基础。再看《Python基础教程(第二版)》。请问您有推荐的书籍吗?
Q:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Python的呢?
Q:作为10多年IT从业人士,已经不想也用不到学具体的开发了,但是想通过Python这几类Web框架了解下Python Web开发的精华,在这种目的下,哪种框架更适合呢,或者说大体都一致?
Q:最近自学Python,想做Python Web开发,感觉遇到瓶颈了。网上的教程不是太详细,只能自己一点点照着框架的文档去尝试,一个简单的问题可能要很长时间才能解决,好崩溃。感觉好难啊。谁有这方面的经验,希望多分享下,交流下。
(三)使用Python进行开发的程序员也会遇到一些困惑,这里整理有关使用Python 进行Web开发的一些问题,包含了性能、适用范围、开发效率、框架选择和使用、运维相关等内容。
Q:不知作者有没有涉及过大数据方向的?我看部分大数据相关的都要用到Python这是为什么?Hadoop整个生态圈都是Java的,Python的定位是什么?
Q:其实我是一个狂热的Python爱好者,但是还是想问:
用Python来进行Web开发,与它的其他竞争者相比,有什么优势呢?比如,与Ruby On Rails相比,它能更敏捷(快速)地开发,用写尽量少的代码来完成任务吗?与Node.js和Golang相比,它在支持高并发、多线程、执行性能等方面有什么优势吗?如果一些性能方面的优化可以通过编写C扩展模块,或者通过cffi、Boost.Python、Cython等方式进行优化,Node.js、Ruby等同样可以做到。一句话概括上面的问题就是:是什么原因吸引我们使用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之外的实现来进行优化吗?(我是不是扯得有点偏题了?)
Q:按照“没有银弹”一说,Python应该也有自己的适用范围吧,是不是比较适用于机器学习,不适合于Web开发呢?
Q:Python Web相对Java Web有什么特别明显的优势吗,在运行机理上,应该还是Java的性能又好一些
Q:大神您当初建站的时候为啥要选择Python这门语言,开发Web Python与Java、PHP之间有什么异同?
Q:能分享下你们那是怎么完成网页组件化的吗?组件化需要考虑CSS,JS的引入问题。现在ng,React之类的Web框架能很好的解决这个问题。你们都是怎么来管理?
Q:我现在在用Python写爬虫,有什么好的建议?数据量大了有什么好的处理方式?
Q:你好, 用Python最大的好处是实用库多,不管是写服务器还是写爬虫都有库,不过就Web开发来说感觉最麻烦的就是想找到一个方法快速入门一个框架,毕竟现在各种框架变化太快,一会Django一会Flask,在这些框架的选择上应该如何权衡呢?是只掌握一个就够了还是应该多看几个呢?还有就是在Python Web 开发过程中 是否适合使用多线程的框架来响应请求呢?因为感觉Java Web开发很看重多线程的使用,不过Java Web感觉棘手的一个原因是重,然后是需要编译,最后是垃圾回收一搞不好就容易大量吃内存CPU,在使用Python Web开发的时候如何避免出现类似Java Web开发的那种情况,谢谢。
Q:为什么您当初选择了呆板的Python而不是活力的Ruby?Python比起Ruby的优势是什么?
Q:这本书不是入门书籍吧?我看定位是进阶读者,从目录上看是介绍了Python Web的生态,还有各种包及编程技巧,这本书有没有围绕着一个项目构建组织全书呢?有点期待想看。
Q:已经买了作者的书,感觉比较有深度,就是有些代码用的Python2,现在迁移到Python3有时候就迷乱了。还有就是作者可以简单介绍下Python如何连接其他语言的C++和Node以及其他的Go还有C#之类的。
Q:Python Web 开发相对Java Web 有什么优势?
Q:自己一直用Django做Web开发,但是总是有一些困惑在于更新很频繁。您有没有一些较好的Django公共组件推荐?快速开发的同时,可以学习别人是怎么实现。现在前后端分离比较多,您认为Django的MVC和使用Restapi做前后端分离,怎么选择合适?谢谢!
Q:感觉Django就是版本帝各种改变接口等……又不向下兼容,我这种业余写点程序的追起来心累
Q:我自学过一段时间的Django,后来研究小米的开源监控系统,才了解到的Flask,现在正在研究Flask,对于Python进行Web开发,您是怎样看这些框架,他们都适合什么样的环境,还有其他的框架推荐吗?谢谢
Q:您好,比较火的Web框架很多,常见的有Flask, Django, Tornado,这三个东西在开发上有什么异同,或者说如果开发一些Restful接口或少量界面的功能,优先考虑哪个?还有就是Python的部署只是把脚本放上去就行了,但环境还要自己配置,有什么方法能像Java那样打包部署么?
Q:你好,我学了快一年的Python,对Python的异步感到比较困惑,Python有多种方式可以实现异步,事件循环、协程、多进程多线程什么的,相关框架也是很多,gevent、twist、tornado,asyncio等等,真是有点眼花缭乱,像NodeJS就比较单一(貌似它的异步就是event loop),所以我想问问你觉得Python到底适不适合做异步编程?如果要学习Python的异步编程如何入手好一点呢?
Q:运维转开发运维有什么好建议? 学习路径能推荐下吗? 核心编程能力就想依靠Python
Q:这个本书有没有涉及Docker,请问你对Docker在Python Web应用部署方面有什么看法,是否会得到大规模的应用呢 ?
Q:了解Python基本知识,希望学习一门Python web框架学习后端开发。之前我对部分主流框架进行了一些了解:Django,Tornado,在知乎上有一个非常活跃的群体。在框架的选择问题上,只有最适合你自己、最适合你的团队的框架。编程语言选择也是一个道理,你的团队Python最熟就用Python好了,其实大部分人是没必要太关心框架的性能的,因为你开发的网站根本就是个小站,能上1万的IP的网站已经不多了,上10万的更是很少很少。在没有一定的访问量前谈性能其实是没有多大意义的,因为你的CPU和内存一直就闲着呢。而且语言和框架一般也不会是性能瓶颈,性能问题最常出现在数据库访问和文件读写上。
(四)豆瓣与Python不得不说的秘密~
Q:使用豆瓣很多年,很喜欢豆瓣的风格。之前一直是在网页端浏览,后来又到了手机app端。我总体感觉豆瓣的进步很快。我想问的问题是,Python Web一直作为豆瓣的开发首选,是因为什么?还有关于豆瓣的权限模块的设计时,Python Web发挥了什么优势。作为手机端app的开发,Python Web会起到什么作用吗?
Q:Python的Web开发框架有很多,豆瓣用的是哪个呢,为什么选这个呢?