Python■你应该知道的Python3.6、3.7、3.8新特性( 二 )
二、Python3.7新特性Python 3.7于2018年6月27日发布 ,包含许多新特性和优化 , 增添了众多新的类 , 可用于数据处理、针对脚本编译和垃圾收集的优化以及更快的异步I/O , 主要如下:
- 用类处理数据时减少样板代码的数据类 。
- 一处可能无法向后兼容的变更涉及处理生成器中的异常 。
- 面向解释器的“开发模式” 。
- 具有纳秒分辨率的时间对象 。
- 环境中默认使用UTF-8编码的UTF-8模式 。
- 触发调试器的一个新的内置函数 。
如果在环境变量中设置
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等语言靠拢 。
- [霸王龙]地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 产业气象站|散热效果大大下降,CPU硅脂应该这样涂!涂多了得不偿失
- 「霸王龙」地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 大卫聊科技|中国首富原来是京东幕后大老板?低调过头了!,有多少人不知道
- 大头哥哥说娱乐|而自己却还不知道?教你几招快速分辨真假好友,微信已被好友删除
- Python之王|Pandas数据合并与拼接的5种方法
- 北峰电讯|你知道几个?,警用对讲机全是PDT?警察常用的模拟对讲机频段
- 王石头科技|30系列还值得买吗,应该选择哪款?,华为Mate 40要来了,Mate
- 霸王龙:地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 影弟提名1|总是打电话催你“换套餐”?可能很多人都不知道,为什么移动客服