Python 3.8 新特性全面解读

发表于:2019-4-02 10:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:开源中国

#
Python
分享:
  本文详细介绍 Python 3.8 中的新功能,以及和与 3.7 相比的一些不同点。
  新功能
  编译的字节码文件的并行文件系统缓存新的 PYTHONPYCACHEPREFIX设置(也可用 )将隐式字节码缓存配置为使用单独的并行文件系统树,而不是每个源目录中的默认子目录。-X pycache_prefix__pycache_报告缓存的位置sys.pycache_prefix(None表示pycache子目录中的默认位置)。
  其他语言变更
  一个continue说法是非法finally条款因与实施问题。在Python 3.8中,这一限制被取消了。
  该int类型现在具有as_integer_ratio()与现有float.as_integer_ratio()方法兼容的新方法。
  增加了对\N{name}的支持。
  Dict和dictviews现在可以使用反向插入顺序进行迭代 reversed()。
  函数调用中允许关键字名称的语法进一步受到限制。特别是,f((keyword)=arg)不再允许。它从来没有打算在关键字参数赋值术语的左侧允许多于一个裸名称。见bpo-34641。
  现在允许Iterable解包,而不使用括号yield 和return语句。(由David Cuthbert和Jordan Chapman在bpo-32117中提供。)
  不是有效转义序列的反斜杠字符对DeprecationWarning从Python 3.6开始生成。在Python 3.8中它生成了一个SyntaxWarning代替。(由Serhiy Storchaka供稿于bpo-32912。)
  SyntaxWarning在某些情况下,编译器会在元组或列表之前错过逗号时生成。例如:
   1data = [
  2    (1, 2, 3) # oops, missing comma!
  3    (4, 5, 6)
  4]
  子类之间的算术运算datetime.date或 datetime.datetime与datetime.timedelta对象现在返回子类的实例,而不是基类。这也会影响其实现(直接或间接)使用datetime.timedelta算术的操作的返回类型,例如 datetime.datetime.astimezone()。
  当Python解释器被Ctrl-C(SIGINT)中断并且KeyboardInterrupt未捕获到的结果异常时,Python进程现在通过SIGINT信号或正确的退出代码退出,以便调用进程可以检测到它因Ctrl而死亡-C。POSIX和Windows上的shell使用它来正确终止交互式会话中的脚本。
  改进的模块
  现在的_asdict()方法collections.namedtuple()返回一个dict而不是一个collections.OrderedDict。这是有效的,因为自Python 3.7以来,常规dicts已经保证了排序。如果需要额外的功能OrderedDict,建议的补救措施是将结果转换为所需的类型:OrderedDict(nt._asdict())。该unicodedata模块已升级为使用Unicode 12.0.0 版本。
  ASYNCIO
  在Windows上,现在是默认的事件循环ProactorEventLoop。
  gettext
  添加pgettext()及其变体。
  检查
  如果该属性是值为docstrings的位置,该inspect.getdoc()函数现在可以找到文档字符串。这提供了类似于我们已经有文件的选项,以及:__slots__dictproperty()classmethod()staticmethod()
   1class AudioClip:
  2    __slots__ = {'bit_rate': 'expressed in kilohertz to one decimal place',
  3                 'duration': 'in seconds, rounded up to an integer'}
  4    def __init__(self, bit_rate, duration):
  5        self.bit_rate = round(bit_rate / 1000.0, 1)
  6        self.duration = ceil(duration)
  GC
  get_objects()现在可以接收一个可选的生成参数,指示从中获取对象的生成。由Pablo Galindo 提供的 bpo-36016。
  gzip
  添加了mtime参数以gzip.compress()获得可重现的输出。(由Guo Ci Teo在bpo-34898供稿。)
  idlelib和IDLE
  超过N行的输出(默认为50)被压缩到一个按钮。可以在“设置”对话框的“常规”页面的PyShell部分中更改N. 右键单击输出可以挤压更少但可能超长的线条。通过双击按钮或通过右键单击按钮进入剪贴板或单独的窗口,可以扩展压缩输出。(由Tal Einat在bpo-1529353供稿。)
  上述更改已被移植到3.7维护版本。
  json.tool
  添加选项--json-lines以将每个输入行解析为单独的JSON对象。(由Weipeng Hong在bpo-31553供稿。)
  计算
  增加math.dist()了计算两点之间欧氏距离的新函数。
  扩展了math.hypot()处理多个维度的功能。以前,它只支持2-D案例。
  添加了新函数,math.prod()作为类似函数sum() 返回“start”值(默认值:1)乘以可迭代数字的乘积。
  os.path
  os.path返回一个布尔值结果类似功能exists(),lexists(),isdir(), isfile(),islink(),和ismount()现在回到False代替升高ValueError或它的子类 UnicodeEncodeError,并UnicodeDecodeError为包含字符或字节在OS级不可表示的路径。
  expanduser()在Windows上现在更喜欢 USERPROFILE 环境变量,不使用 HOME,通常不为常规用户帐户设置。
  ncurses
  添加了一个新变量,其中包含底层ncurses库的结构化版本信息:ncurses_version。
  pathlib
  pathlib.Path返回布尔结果类似方法 exists(),is_dir(), is_file(),is_mount(), is_symlink(),is_block_device(), is_char_device(),is_fifo(), is_socket()现在回到False而不是提高 ValueError或它的子类UnicodeEncodeError的包含字符的不可表示在操作系统级别路径。(由Serhiy Storchaka供稿于bpo-33721。)
  shutil
  shutil.copytree()现在接受一个新的dirs_exist_ok关键字参数。
  SSL
  添加SSLContext.post_handshake_auth以启用和 ssl.SSLSocket.verify_client_post_handshake()启动TLS 1.3握手后身份验证。
  统计
  添加statistics.fmean()为更快的浮点变体statistics.mean()。
  添加statistics.multimode()了返回最常见值的列表。
  添加statistics.NormalDist了一个用于创建和操作随机变量的正态分布的工具.
   1>>>
  2>>> temperature_feb = NormalDist.from_samples([4, 12, -3, 2, 7, 14])
  3>>> temperature_feb
  4NormalDist(mu=6.0, sigma=6.356099432828281)
  5
  6>>> temperature_feb.cdf(3)            # Chance of being under 3 degrees
  70.3184678262814532
  8>>> # Relative chance of being 7 degrees versus 10 degrees
  9>>> temperature_feb.pdf(7) / temperature_feb.pdf(10)
  101.2039930378537762
  11
  12>>> el_nino = NormalDist(4, 2.5)
  13>>> temperature_feb += el_nino        # Add in a climate effect
  14>>> temperature_feb
  15NormalDist(mu=10.0, sigma=6.830080526611674)
  16
  17>>> temperature_feb * (9/5) + 32      # Convert to Fahrenheit
  18NormalDist(mu=50.0, sigma=12.294144947901014)
  19>>> temperature_feb.samples(3)        # Generate random samples
  20[7.672102882379219, 12.000027119750287, 4.647488369766392]
  tar文件
  该tarfile模块现在默认为新档案的现代pax(POSIX.1-2001)格式,而不是之前的GNU特定格式。这通过标准化和可扩展格式的一致编码(UTF-8)提高了跨平台的可移植性,并提供了其他一些好处。
  令牌化
  当提供没有尾随新行的输入时,tokenize模块现在隐式地发出NEWLINE令牌。此行为现在与C tokenizer在内部执行的操作相匹配。
  Tkinter
  添加的方法selection_from(), selection_present(), selection_range()和 selection_to() 在tkinter.Spinbox类。
  moveto() 在tkinter.Canvas课堂上添加了方法。
  时间
  CLOCK_UPTIME_RAW为macOS 10.12 添加了新时钟。
  unicodedata
  新函数is_normalized()可用于验证字符串是否处于特定的正常形式。

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
  
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号