网站LOGO
博客 | 棋の小站
页面加载中
12月6日
达尔达尼亚瀑布,博洛尼亚,意大利 ...
网站LOGO 博客 | 棋の小站
记录学习,心得,状态,生活。
菜单
  • 热评
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    不迟的Python3.12使用体验
    点击复制本页地址
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    按住ctrl可打开默认菜单

    不迟的Python3.12使用体验

    · 原创 ·
    技术分享 · Python
    共 4251 字 · 约 3 分钟 · 278

    转眼间Python3.12已经发布两个月了,是在5月,那时候学业繁忙加上做各种课设和三级项目就没有第一时间体验到Python3.12,今天闲来无事去Python官网看看发现Python3.12已经发布第四个测试版了,于是我在今天将这个版本下载了下来,并参照Python的官方文档体验了Python3.12的几个新功能。

    点我阅读Python3.12文档

    改进的错误信息

    在使用未定义的标识符时,若此标识符为标准库中的模块名,则解释器会提示用户是否忘记导入此模块。

    python 代码:
    >>> sys.version_info
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'sys' is not defined. Did you forget to import 'sys'?

    实际使用

    Python3.11:

    错误提示错误提示

    Python3.12:

    错误提示错误提示

    但是在如今集成开发环境下,实时代码检查功能也会提示这一错误,因此这个错误的提示可以说是很少用到。

    改进的错误信息包含实例错误。如一个类具有一个属性,而该类的成员函数中使用了一个未定义的标识符,而这个标识符和该属性名称完全一致,则解释器会提示用户是否忘记引用该属性。

    python 代码:
    >>> class A:
    ...    def __init__(self):
    ...        self.blech = 1
    ...
    ...    def foo(self):
    ...        somethin = blech
    ...
    >>> A().foo()
      File "<stdin>", line 1
        somethin = blech
                   ^^^^^
    NameError: name 'blech' is not defined. Did you mean: 'self.blech'?

    实际使用

    Python3.12:

    错误提示错误提示

    Python3.11:

    错误提示错误提示

    Python3.11这个错误提示很有趣,竟然提示的是False,可见对于属性的错误提示Python3.12优化得不错。

    最后一个错误提示就是导入提示,来看下面的一个搞笑例子。

    python 代码:
    import a.y.z from b.y.z
      File "<stdin>", line 1
        import a.y.z from b.y.z
        ^^^^^^^^^^^^^^^^^^^^^^^
    SyntaxError: Did you mean to use 'from ... import ...' instead?

    但是这种低级错误一般不会犯吧(但是有些Python初学者可能受到其他编程语言的影响会这样写)。

    还有一个导入提示就是拼写错误。

    python 代码:
    from collections import chainmap
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?

    这种属于大小写拼写错误。但是实际上这些错误IDE都会提醒,但是Python解释器的这种功能不能没有,也算是给这门强大的语言锦上添花了。

    f-string的语法形式化

    现在f-string可以在格式化的大括号中使用和该字符串一致的引号了。

    python 代码:
    >>> songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism']
    >>> f"This is the playlist: {", ".join(songs)}"
    'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'

    实际效果

    f-string的语法形式化f-string的语法形式化

    值得注意的是这段代码在解释器为Python3.12的PyCharm中仍会报错。

    PyCharm的错误提示PyCharm的错误提示

    而Python3.11中运行也会提示这个错误。

    错误提示错误提示

    现在f-string也可以将花括号分开多行来写,以提高可读性。

    python 代码:
    >>> f"This is the playlist: {", ".join([
    ...     'Take me back to Eden',  # My, my, those eyes like fire
    ...     'Alkaline',              # Not acid nor alkaline
    ...     'Ascensionism'           # Take to the broken skies at last
    ... ])}"
    'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'

    实际效果

    f-string的语法形式化f-string的语法形式化

    这个我感觉还是比较实用的,尤其是像我这样喜欢f-string又为程序可读性而两者取舍的。

    f-string中的错误提示

    在Python3.11中,若f-string出现错误,Python会输出一整行的错误信息,而Python3.12中只会输出错误的表达式。

    Python3.11中:

    python 代码:
    >>> my_string = f"{x z y}" + f"{1 + 1}"
      File "<stdin>", line 1
        my_string = f"{x z y}" + f"{1 + 1}"
                       ^^^
    SyntaxError: invalid syntax. Perhaps you forgot a comma?

    Python3.12中:

    python 代码:
    >>> my_string = f"{x z y}" + f"{1 + 1}"
      File "<stdin>", line 1
        (x z y)
         ^^^
    SyntaxError: f-string: invalid syntax. Perhaps you forgot a comma?

    这个其实我感觉可有可无。

    其他更新

    根据PEP 623,删除了 unicode 对象的 C 实现的弃用wstr和成员。wstr_length

    在该unittest模块中,删除了许多长期弃用的方法和类。(自 Python 3.1 或 3.2 以来,它们已被弃用)。

    已弃用的smtpd和distutils模块已被删除(参见PEP 594和PEP 632。setuptools包(默认安装在 virtualenvs 和许多其他地方)继续提供模块distutils。

    许多其他旧的、损坏的和弃用的函数、类和方法已被删除。

    字符串中无效的反斜杠转义序列现在用SyntaxWarning而不是警告DeprecationWarning,使它们更明显。(它们将来会成为语法错误。)

    整数的内部表示已更改以准备性能增强。(这应该不会影响大多数用户,因为它是一个内部细节,但它可能会导致 Cython 生成的代码出现问题。

    对于此次更新我就看到这里,更多请移步《Python 3.12 中的新功能》查看。

    声明:本文由 (博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    现在已有

    2

    条评论
    发一条!
    1. 头像
      TeacherDu
      • 等级:Lv.5
      • 角色:首页 · 好友
      • 在线:本周

      又出新版本啦!

      · · · 北京-北京
      1. 头像
        TeacherDu

        对,Python3.12在10月份就发布正式版了,虽然更新了些寂寞,但是最新版本的Python不能没有。

        · · · 辽宁-沈阳
    博客logo 博客 | 棋の小站 记录学习,心得,状态,生活。
    ICP 冀ICP备2023007665号 ICP 冀公网安备 13030202003453号

    🕛

    本站已运行 221 天 14 小时 36 分

    👁️

    今日访问量:305 昨日访问量:2564

    🌳

    建站:Typecho 主题:MyLife
    博客 | 棋の小站. © 2023 ~ 2023.
    网站logo

    博客 | 棋の小站 记录学习,心得,状态,生活。
     
     
     
     
    壁纸