当前位置: 首页 > 科技观察

Python3.10几个好用的新特性

时间:2023-03-12 12:53:02 科技观察

Python3.1010月4日发布了,要更新吗?3.10版本没有增加新的模块,但引入了许多新的和有用的特性。一起来看看吧。更详细的语法错误提示信息可以在调试代码时提供更多新的错误信息和提示,报告可以指出错误的语法,而不仅仅是提供“SyntaxError”。这是一个很棒的新特性,不仅适合刚开始学习python的人,也适合所有人,没必要一个字一个字的看。Python3.10会提示我们输入错误的位置,不再需要StackOverflow,哈。结构模式匹配结构模式匹配以match语句和case语句的形式使用。模式可以是序列、映射、python原始数据类型和类实例。我们可以把它看作是switch语句的增强版,简单的例子:-numbers=[1,2,3,4]forninnumbers:matchn:case1:print("Numberis1")case2:print("Numberis2")case3:print("Numberis3")case_:print("Numberisnot1,2or3")关键字匹配后跟变量名。如果匹配,将执行case块内的语句。如果没有匹配,则执行case_block中的语句。上面程序的结果如下:Numberis1Numberis2Numberis3Numberisnot1,2or3这种结构模式匹配同样适用于复杂模式。defhuman_age(person):#person=(name,age,gender)matchperson:case(name,_,"male"):print(f"{name}isman.")case(name,_,"female"):print(f"{name}iswoman.")case(name,age,gender):print(f"{name}is{age}old.")结果是这样的:human_age(("Carol",25,"女”))卡罗利斯女人。它看起来像斯卡拉。使用Pyspark3.10应该更容易。这是一个Scala代码,看看它是否看起来像importscala.util.Randomvalx:Int=Random.nextInt(10)xmatch{case0=>"zero"case1=>"one"case2=>"two"case_=>"other"}新型联合运算符引入了X|Y形式的新型联合运算符。这为表达类型X或类型Y提供了清晰的形式。defsquare(number:int|float):returnnumber**2结果:square(2.5)6.25new运算符也可以用作isinstance()和issubclass的第二个参数().isinstance("3",int|str)Trueisinstance("GoodBye",int|str)True对现有模块的一些改进pprint()添加了一个新的关键字参数-underscore_numbers。>>>pprint.pformat(int(1e9),underscore_numbers=True)'1_000_000_000'我们可以使用int.bit_count()来计算整数的二进制表示中的位数。value=50print(bin(value))0b101010print(value.bit_count())3有点像numpy的bincount,Statistics加入协方差函数>>>importstatistics>>>x=[1,2,3,4,5,6,7,8,9]>>>y=[1,2,3,1,2,3,1,2,3]>>>statistics.covariance(x,y)0.75statistics.correlation()也可以计算皮尔逊。没想明白为什么要加上这两个。可能作为AI开发者,np、scipy、pandas都是需要安装的,web开发用不上。我真的不明白为什么要添加这个。statistics.linear_regression()这个很好玩,虽然没什么用,但是统计学可以计算线性回归。根据以下线性函数描述自变量x和因变量y之间的关系:-y=斜率*x+截距+噪声其中斜率和截距是估计的回归参数,噪声表示数据的可变性。>>>years=[2001,2005,2010]>>>houses_built=[5,8,14]>>>slope,intercept=statistics.linear_regression(years,houses_built)>>>round(slope*2017+intercept)21接下来就是加一个梯度反向传播,statistics模块可以训练MLP了。综上,我觉得和Cpython等其他东西关系不大,就不细说了。可以节省大量的开发调试时间,模式匹配也是个好东西,用过Scala的都知道。最后,我们要不要升级?对我来说,我的python版本是基于Pytorch的,我会使用Pytorch支持的任何版本。Conda虽然可以管理版本,但是还有很多其他的Python包不知道支持不支持3.10,所以我的建议是观望一下,毕竟我们是为了自己的舒服用的。但是如果不考虑其他包的兼容性,我肯定会先升级到3.10。