python api怎么用(Q&A丨关于 Python 入门的一些问题)python初学 / python在API设计与开发中的应用...

wufei123 发布于 2024-05-27 阅读(21)

Reboot 每周都会收集一些有关 Python 学习及运维开发的一些问题,整理出优秀的答案,集合成"Q&A" 专栏,定期为你解疑答惑。如果你有想要问的问题或者更好的答案,可以在文章底部留言。

Q:用 python 能够做什么?解决什么问题?A1:理论上来说,计算机能做什么,python 语言就能让它做什么,也即 python能做什么数值计算、机器学习、爬虫、云相关开发、自动化测试、运维自动化、web开发、poc脚本、网络编程等。

A2:根据TIOBE的公开资料,Python 作为世界上第五大编程语言,应用十分广泛 从Web后台开发到大数据处理;从自动化测试到运维开发Python都是兵器谱的前三名 Web开发:国内著名的豆瓣、知乎都是用 Python 作为主力语言编写的网站,在很多公司内部,很多 Web 化的工具也都是Powered by Flask、Django  。

大数据处理:从编写 MapReduce 到各种统计工作,从 PySpark 到 Notebook,不会 Python,你很难踏入大数据的殿堂半步自动化测试:从各种 Test case 的编写,到测试自动化系统的构建。

拥有几乎所有的测试库(Selenium、UT)支持的Python,一直是测试大神的首选运维开发:Bash功能太弱、Perl又那么晦涩,几乎所有的Linux发行版都把 Python作为默认安装无论是 OpenStack 这样的巨无霸、还是各种运维自动化小系统、小工具。

Q:应该学习最新版本的 Python 3 还是旧版本的Python 2.7?A1:似乎每个学 python 的初学者都喜欢问这个问题,我当初也一样反过来想想,为什么问这个问题的都是初学者呢?没见过玩 python 很资深的人问版本的问题。

总结下我理解的原因(1):对学习 python 没有安全感,担心学错了版本,用不上白学了 这点焦虑大可不必python2,3 确实有区别,但作为初学者,打好基础才是最重要的,还没到考虑区别的阶段(2):关于 python2.7  和 python3.0 的使用范围的担心。

目前是有一些公司生产环境用 python3,但 python2.7 目前仍然是主流不用担心学了2.7找不到工作抛开上面的焦虑,如果要学习就选择资料最多,最容易上手的版本来学,坦白讲目前能找到的资料python2.7是最多的,遇到问题搜到的答案也最多。

A2:自己玩或者学习,可以选择 Python3.X,毕竟新东西是趋势如果是公司重要项目,选择 Python2.7 稳重,如果是不太重要的可以选择用新版本注意:语言是人和机器的沟通工具,目的也是表达你的意思给计算机,不管是Python2.X还是Python3.X都行,需要重点了解人如何让机器按照自己的意识去工作(思路、想法)。

A3:先强调一点,Python2 和Python3 的差别,大概俩小时就可以完全掌握,所以版本并不是重要问题如果一定要选一个版本,看你现在或者以后要去的公司,用的什么版本,你就学什么版本如果没有明确的目标,现在开始学的话,建议从 Python3 开始学,虽然我也一直用2.7,但是以后的潮流还是 Python3 的世界。

举个例子,就像刚开始学打dota的时候,不要纠结于你的电脑CPU是i5还是i7的,都是好东西,而且之间的差别对新手并没有影响最怕的就是纠结于选择i5还是i7,纠结了一个月,还没有开始启动dota,最终只能看别人超神,自己继续纠结。

Q:怎么理解Python中的filter?应用于什么场景?A1:Python 内建的 filter()函数用于过滤序列和map()类似,filter()也接收一个函数和一个序列和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:def is_odd(n):    return n % 2 == 1 filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]) # 结果: [1, 5, 9, 15]

把一个序列中的空字符串删掉,可以这么写:def not_empty(s):    return s and s.strip() filter(not_empty, [A, , B, None, C,  ]) # 结果: [A, B, C]

可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数A2:没事多 help 和dir根据定义的函数的返回值过滤掉(return Fal;se)代元素(list, tuple等)中的元素定义函数模板

def filter_callback(x):return True/False比如我要过滤出range(0, 10)中所有偶数的元素

Q:能不能详细解答下flask和django的区别?A1:这种问题搜一搜到处都是,就推荐一个关于两者区别的总结吧:( 1 ) FlaskFlask 确实很“轻”,不愧是 Micro Framework ,从 Django 转向 Flask 的开发者一定会如此感慨,除非二者均为深入使用过

Flask 自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的 Python 库入门简单,即便没有多少 web 开发经验,也能很快做出网站非常适用于小型网站

非常适用于开发 web 服务的 API开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验各方面性能均等于或优于 DjangoDjango 自带的或第三方的好评如潮的功能, Flask 上总会找到与之类似第三方库

Flask 灵活开发, Python 高手基本都会喜欢 Flask ,但对 Django 却可能褒贬不一Flask 与关系型数据库的配合使用不弱于 Django ,而其与 NoSQL 数据库的配合远远优于 Django

Flask 比 Django 更加 Pythonic ,与 Python 的 philosophy 更加吻合( 2 ) DjangoDjango 太重了,除了 web 框架,自带 ORM 和模板引擎,灵活和自由度不够高

Django 能开发小应用,但总会有“杀鸡焉用牛刀”的感觉Django 的自带 ORM 非常优秀,综合评价略强与 SQLAlchemyDjango 自带的模板引擎简单好用,但其强大程度和综合评价略低于 Jinja

Django 自带 ORM 也使 Django 与关系型数据库耦合度过高,如果想使用 MongoDB 等 NoSQL 数据,需要选取合适的第三方库,且总感觉 Django+SQL 才是天生一对的搭配, Django+NoSQL 砍掉了 Django 的半壁江山

Django 目前支持 Jinja 等非官方模板引擎Django 自带的数据库管理 app 好评如潮Django 非常适合企业级网站的开发:快速、靠谱、稳定Django 成熟、稳定、完善,但相比于 Flask , Django 的整体生态相对封闭

Django 是 Python web 框架的先驱,用户多,第三方库最丰富,最好的 Python 库,如果不能直接用到 Django 中,也一定能找到与之对应的移植Django 上手也比较容易,开发文档详细、完善,相关资料丰富

简单来说,Flask 和 Dj ango 都是很优秀的框架基础功能来说,二者都支持Flask更轻量级,Django 则比较重二者的区别,其实在很多框架里面都存在这种情况一种风格是走极简,只保留核心部分;一种是大而全,啥都有。

从理解一个框架上来说,flask 更容易理解毕竟只有核心的内容在理解了一个之后,再去看其它的也很方便从实际应用说,只能说看个人喜好一般的项目,这俩框架都ok但无疑 Django 功能插件更丰富A2:Python 在国内应该是除了PHP以外最流行的开发语言了(在国外的或许ROR能竞争,但在国内估计用的人没多少)。

在 PHP 的世界里面,有一堆开发框架,有国产的 ThinkPHP、YII、CI,稍微新一点的Larvel5,每个都有不少的用户而且项目的活跃度都不错相对来说Python就会略微逊色,名义上是有 Django、Flask、Bottle、Pyramid、Web2Py等,但实际真正活跃的却不多。

阵营来说划分还是比较明确:以 Django 为首的重量级框架和以 Bottle、Flask 为首的轻量级框架,因此在这里我选择两个社区相对活跃的两个典型作为比较DjangoDjango 是基于中间件的一个大型框架。

框架本身的内容相当丰富,基础部分:模版引擎、ORM、表单、路由分发这些标配,还有不少的中间件:登陆、后台管理,这些还是官方中间件,另外还有不少的第三方中间件关于第三方的我没有详细研究过,质量不太好评论还有由 ROR 带起的基于命令的 Web 开发方式和扩展、还有内建的数据库迁移,基本上你呢想到的 Django 都有。

可以说 Django 和 Python 相当匹配,前者是 Web 开发的万金油,后者是开发领域的万金油另外 Django 这个框架本身还有一个专门的基金会,这个基金会是由 Django 的母公司成立的,估计有不少用这个框架的公司也对期捐助过。

框架本身相当活跃,每隔大概8个月就有一个大版本社区也是相当活跃,官方的 Community、非官方(StackOverflow)和IRC(据说IRC是比任何一个开源项目都要活跃)基本上你碰到的问题大家都会有解决或者Workout方案。

FlaskFlask 框架本身只包含路由分发,请求和响应的封装和插件系统,在加上作者自己的Werkzeug (处理WSGI)、jinja2(模板引擎)和Flask-SQLAlchemy扩展(Model层),这几个同一个作者的项目构成一个完整的MVC框架。

对于 Flask 本身,一个微框架,这已经足够了,而且它也只能提供这么多如果你需要表单处理,请安装 Flask-WTF;如果你需要基于命令的开发模式,请安装 Flask-Script 和 Flask-CLI (这是一个Flask1.0的backport模块);如果你要登陆验证,请装 Flask-Login;如果你要后台管理,请装 Flask-Admin。

什么?!你全部都要?请装 Django对 Flask 就是这么一个框架这是一个典型的社区项目,作者在实现了一个牛X的核心以后,就撒手交给社区各个插件的文档分散(虽然Flask曾经出了一本书,试图打通各个插件和 Flask 关系,但是当需要真正使用的时候,查文档还是需要在不同的Chrome Tab 里面切换),而且社区插件的质量、支持和活跃度也需要话很大的力气去确认。

Flask 这个项目毫无疑问是优秀的:完善的官方文档,详细的教程(还有一个牛X的作者作为光环加持)但是和 Django 完全不在一个应用层面,我会在下一段作出比较和说明而且 Flask 这个项目基本已经处于沉睡期,最新的版本0.10.1是2013年发布的,项目的代码仓库也是比较低的活跃度(大概是一个月10次左右的Commit和PR),1.0的发布从2014年到2016年一直说要发布,一直没有出来。

各个插件更新也是停留在2015年中和 Django 比较活跃度确实令人捉急Flask和Django的应用场景鉴于 Flask 和 Django 的特点,如果你是开发一个 REST API 的系统,没有复杂的分层和逻辑的话,Flask 会是一个不错的选择,因为框架内建的功能已经足够你完成这个任务;又或者,你是打算实现一个大型的系统,需要自己重新实现大部分插件的内容,Flask 也还是不错,因为它足够的简单,能让你快速的读懂和扩展。

其他的情况我还是推荐你用回 Django尤其是当你需要安装大量的 Flask 插件,去实现 Django 本来就有的功能时,你就应该意识到你需要放弃 Flask当然这只是个人的看法,也没有绝对这一说,主要还是看你想在框架上花费多少的时间。

点击原文,查看更多Python内容!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻42250