请选择 进入手机版 | 继续访问电脑版

你可能没有在Python3中使用但却应该使用的东西

0
回复
229
查看
[复制链接]

37

主题

37

帖子

121

积分

注册会员

Rank: 2

积分
121
发表于 2019-7-30 19:43:40 | 显示全部楼层 |阅读模式
 
"\u003Cdiv\u003E\u003Cp\u003E由于Python EOL的发布,很多人开始将他们的Python版本从2切换到3。不幸的是,我发现大多数Python3看起来仍然像Python2,但是要加括号(尽管在我之前的文章《使用Python进行web抓取介绍》中的代码示例也是这样)。下面,我将展示一些令人兴奋的特性示例,你只能在Python3中使用它们,希望它可以让你使用Python解决问题变得更容易。\u003C\u002Fp\u003E\u003Cp\u003E所有示例都是在Python 3.7中编写的,每个特性都包含该特性所需的最低Python版本。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003Ef-strings (3.6+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E在任何编程语言中,没有字符串是很难做任何事情的,为了保持理智,你希望有一种结构化的方法来处置惩罚字符串。大多数使用Python的人更喜欢使用format方法。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002Faaff04b5de8d452b9a1058c2f487357f\" img_width=\"797\" img_height=\"260\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E除了format,Python 3还提供了一种通过f-strings进行字符串插值的机动方法。和上面一样使用f-strings的代码是这样的:\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp9.pstatp.com\u002Flarge\u002Fpgc-image\u002F10cc57533e7b4d25a868b5169e015a9d\" img_width=\"797\" img_height=\"156\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E\u003Cstrong\u003EPathlib (3.4+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003Ef-strings非常棒,但是有些字符串(比如文件路径)有自己的库,这使得它们的操纵更加容易。Python 3提供了pathlib作为一个处置惩罚文件路径的方便抽象。如果你不确定为什么你应该使用pathlib,试着阅读这篇良好的文章——《为什么你应该使用pathlib》——Trey Hunner。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fb37282b3400d449f898809d0853df31d\" img_width=\"796\" img_height=\"316\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E\u003Cstrong\u003E类型提示 (3.5+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E静态和动态类型是软件工程中一个热门的话题,几乎每个人都对此有自己的见解。我将让读者决定何时应该编写类型,但我认为你至少应该知道Python 3支持类型提示。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F6331f2b2185b483c9dcac520cb2e8936\" img_width=\"796\" img_height=\"128\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E\u003Cstrong\u003E罗列 (3.4+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003EPython 3提供了一种通过Enum类来编写罗列的简单方法。罗列是封装常量列表的一种方便的方法,因此它们不会在没有太多结构的环境下随机分布在你的代码中。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F5c5c237c0b744dcfa1ea4c705c471413\" img_width=\"794\" img_height=\"234\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E罗列是一组符号名称(成员),它们绑定到惟一的常量值。在罗列中,可以通过标识对成员进行比较,并且罗列自己也可以被遍历。https:\u002F\u002Fdocs.python.org\u002F3\u002Flibrary\u002Fenum.html\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F6331f2b2185b483c9dcac520cb2e8936\" img_width=\"796\" img_height=\"128\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E\u003Cstrong\u003E内置的 LRU 缓存 (3.2+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E缓存存在于我们今天使用的几乎所有水平的软件和硬件中。Python 3通过将LRU(最近最少使用的)缓存公开为一个名为lru_cache的装饰器,使得使用它们变得非常简单。\u003C\u002Fp\u003E\u003Cp\u003E下面是一个简单的Fibonacci函数,我们知道它将从缓存中受益,因为它通过递归多次执行相同的任务。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F89d56bbe8bb84f79930f8758e1148f95\" img_width=\"792\" img_height=\"315\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E现在我们可以使用lru_cache对其进行优化(这种优化技术称为memoization(记忆化))。执行时间从几秒降到几纳秒。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F91b2d1aa5f734d3da8210f3f9e0ae88f\" img_width=\"797\" img_height=\"337\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E\u003Cstrong\u003E扩展的可迭代对象解包 (3.0+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E请查看代码(文档 https:\u002F\u002Fwww.python.org\u002Fdev\u002Fpeps\u002Fpep-3132\u002F )。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F66d751f741774d108d1e4bb99b25e136\" img_width=\"794\" img_height=\"391\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E\u003Cstrong\u003E数据类 (3.7+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003EPython 3引入了数据类,这些数据类并没有太多限制,可以使用它们来减少样板代码,因为装饰器会自动生成特殊的方法,比如__init__() 和__repr()__。根据官方建议,它们被描述为“具有默认值的可变定名元组”。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp9.pstatp.com\u002Flarge\u002Fpgc-image\u002Fc46aae85b0d0457cabf9c7832846c19b\" img_width=\"792\" img_height=\"424\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E使用数据类的Armor的相同实现。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002Faa5de0f4f59f465b9f1fd663e4b5662c\" img_width=\"802\" img_height=\"471\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Ch1\u003E\u003Cstrong\u003E隐式定名空间包 (3.3+)\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E结构化Python代码的一种方法是在包中(带有一个__init__.py文件的文件夹)。下面的示例是由官方Python文档提供的。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F6590d417af2b46aba36c898dc2a3a6e6\" img_width=\"798\" img_height=\"607\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E在Python2中,上面的每个文件夹都必须有一个__init__.py文件,它会将该文件夹转换为一个Python包。在Python3中,随着隐式定名空间包的引入,这些文件就不再需要了。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F88886e1d15c949f6aba437cc593fea55\" img_width=\"795\" img_height=\"527\" alt=\"你可能没有在Python3中使用但却应该使用的东西\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E编者注:正如一些人所说,这并不像我在本节中指出的那样简单,从官方的PEP 420规范来看——__init__.py对于普通包仍然是必须的,将它从文件夹结构中删除将会把文件夹酿成一个带有附加限制的当地定名空间包,关于本机定名空间包的官方文档对此展示了一个很好的例子,以及定名所有的限制。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003E竣事语\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E就像互联网上几乎所有的列表一样,本列表并不完整。我希望这篇文章至少向你展示了一个你以前并不知道的Python 3功能,它将帮助你编写更简洁、更直观的代码。一如既往,所有的代码都可以在GitHub上找到。\u003C\u002Fp\u003E\u003Cp\u003E(https:\u002F\u002Fgithub.com\u002FWeenkus\u002FDataWhatNow-Codes\u002Fblob\u002Fmaster\u002Fthings_you_are_probably_not_using_in_python_3_but_should\u002Fpython%203%20examples.ipynb )\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E英文原文:https:\u002F\u002Fdatawhatnow.com\u002Fthings-you-are-probably-not-using-in-python-3-but-should\u002F \u003C\u002Fp\u003E\u003Cp\u003E译者:野生大熊猫\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003C\u002Fdiv\u003E"'.slice(6, -6),      groupId: '6717399289120686599
北京赛车幸运飞艇PK10分分彩时时彩新疆时时彩重庆时时彩五分彩老重庆时时彩三分彩二分彩,福彩3D,排列三极速赛车,北京赛车,PC蛋蛋老北京赛车广东11选5山东11选5江西11选5上海11选5幸运快三湖北快三安徽快三上海快三广西快三北京快三
回复

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

信息推荐

更多+

最新信息

更多+

关注我们:UI手游网

qaqa345678

官方微信

全国服务热线:

4000-018-018

公司地址:上海市嘉定区银翔路655号B区1068室

运营中心:成都市锦江区东华正街42号广电仕百达国际大厦25楼

邮编:610066 Email:mail@yidai.com

Copyright   ©2015-2019  UI手游  Powered by©Discuz!  技术支持:UI手游