我的工作语言是java/kotlin/typescript, 本来是不喜欢它的,不理解它存在的价值,觉得它是个很难在实际工作中使用的语言,比如说做web app的后台,它肯定比不上java,因为不太可能有Netty, Hibernate这样的东西基于Python来做; 做Web前台,肯定比不上Angular Typescript这些; 做桌面,估计比不过WPF/C#,做底层和c/c++比较就更不用说了。
但最近在数学运算方面,发现它确实有价值。其实这是取舍的好例子。一种语言,适合大工程,那么开发小程序可能就比较费劲。而写小规模的程序,验证算法什么的,可能就是Python生存的土壤,我觉得它的优点主要如下:
运算符重载
这个事情争议很多。因为程序员可以定义奇形怪状的运算符,表达各种各样的意思,可能有很多不恰当的应用。但话说回来,如果很好的利用,绝对是一件好东西。对比一下这点代码,高下立见
print("度规张量的最原始解释: 将向量的斜角坐标转换成笛卡尔坐标再运算,"
"(Va @ G.T) @ (G @ Va)\n",
(Va @ G.T) @ (G @ Va))
print("度规张量的最原始解释: 将向量的斜角坐标转换成笛卡尔坐标再运算,"
"(Va @ G.T) @ (G @ Va)\n",
np.matmul( np.matmul(Va, G.T), np.matmul(G, Va)))
c/c++可以,但比起python,就难用的多了。
数学运算方便
做2**1000这种运算,java麻烦很多。要用BigInteger之类的
拿起来就写,不用定义类、main函数什么的
kotlin也有这个特性,不过kotlin倾向于更复杂的工程,所以这个特性默认不开启。事情总有两面性,这是一个好例子。
直接可以执行py文件
这是脚本语言的典型特征,不用编译。虽然kotlin也有解释器,但正常还是需要编译的,这是取舍,事情两面性的另一个例子。ASP, PHP这种改了刷新立即生效的特性,一直让人怀念。
安装包很好
安装完了,基本上就可以写程序使用了。不像java/typescript这些,还得做各种配置,有一定的门槛。不过像pip这些东西,也是有点增加了复杂性。如果能够一个简单的配置文件,列出来需要什么,然后执行程序,会自动下载依赖的库,那就好多了。