Python■你应该知道的Python3.6、3.7、3.8新特性( 二 )


  • json模块中的 json.load() 和 json.loads() 函数开始支持 binary 类型输入 。
  • 更多内容参考官方文档:What's New In Python 3.6
    二、Python3.7新特性Python 3.7于2018年6月27日发布 ,包含许多新特性和优化 , 增添了众多新的类 , 可用于数据处理、针对脚本编译和垃圾收集的优化以及更快的异步I/O , 主要如下:
    • 用类处理数据时减少样板代码的数据类 。
    • 一处可能无法向后兼容的变更涉及处理生成器中的异常 。
    • 面向解释器的“开发模式” 。
    • 具有纳秒分辨率的时间对象 。
    • 环境中默认使用UTF-8编码的UTF-8模式 。
    • 触发调试器的一个新的内置函数 。
    1、新增内置函数breakpoint()使用该内置函数 , 相当于通过代码的方式设置了断点 , 会自动进入Pbd调试模式 。
    如果在环境变量中设置PYTHONBREAKPOINT=0会忽略此函数 。 并且 , pdb 只是众多可用调试器之一 , 你可以通过设置新的 PYTHONBREAKPOINT 环境变量来配置想要使用的调试器 。
    下面有一个简单例子 , 用户需要输入一个数字 , 判断它是否和目标数字一样:
    \"\"\"猜数字游戏\"\"\"def guess(target):
       user_guess = input(\"请输入你猜的数 >>> \")    if user_guess == target:        return \"你猜对了!\"
       else:        return \"猜错了\"if __name__ == '__main__':
       a = 100
       print(guess(a))

    不幸的是 , 即使猜的数和目标数一样 , 打印的结果也是‘猜错了’ , 并且没有任何异常或错误信息 。
    为了弄清楚发生了什么 , 我们可以插入一个断点 , 来调试一下 。 以往一般通过print大法或者IDE的调试工具 , 但现在我们可以使用 breakpoint() 。
    \"\"\"猜数字游戏\"\"\"def guess(target):
       user_guess = input(\"请输入你猜的数 >>> \")
       breakpoint()   //加入这一行    if user_guess == target:        return \"你猜对了!\"
       else:        return \"猜错了\"if __name__ == '__main__':
       a = 100
       print(guess(a))

    在 pdb 提示符下 , 我们可以调用 locals() 来查看当前的本地作用域的所有变量 。 (pdb 有大量的命令 , 你也可以在其中运行正常的Python 语句)
    请输入你猜的数 >>> 100
    > d:\\work\\for_test\\py3_test\\test.py(7)guess()
    -> if user_guess == target:
    (Pdb) locals()
    {'target': 100 'user_guess': '100'
    (Pdb) type(user_guess)
    <class 'str'>

    搞明白了 , target是一个整数 , 而user_guess 是一个字符串 , 这里发生了类型对比错误 。
    2、类型和注解从 Python 3.5 开始 , 类型注解就越来越受欢迎 。 对于那些不熟悉类型提示的人来说 , 这是一种完全可选的注释代码的方式 , 以指定变量的类型 。
    什么是注解?它们是关联元数据与变量的语法支持 , 可以是任意表达式 , 在运行时被 Python 计算但被忽略 。 注解可以是任何有效的 Python 表达式 。
    下面是个对比的例子:
    # 不带类型注解def foo(bar baz):# 带类型注解def foo(bar: 'Describe the bar' baz: print('random')) -> 'return thingy':

    上面的做法 , 其实是Python对自身弱类型语言的强化 , 希望获得一定的类型可靠和健壮度 , 向Java等语言靠拢 。