写了一阵子 Python 代码发现真香

1. 写在前面

Ruby 语言到 Go 语言,目前终于开始使用 Python 进行编码。

对于职场新手,可能首先会提出一个问题:难道 Ruby/Go 不香吗?难道 Python 比其他两个语言好?其实都不是。如果我们认同“技术是为业务服务的”这个论调,那么“编程语言应该为业务场景服务”,仅此而已。

2. 编程语言是为业务场景服务的

根据业务场景选择合适的编程语言,使得当前场景的开发收益最大化。当用户量不是很多(机器没什么压力)而业务逻辑却比较繁杂(开发者编码有压力)的情况下,使用 Python 编码或许是一个较为明智的选择。

2.1 静态语言与动态语言

所谓静态语言,是指代码在编译的时候(简称编译时)变量的类型就可以确定的语言,比如 C/C++、Java、Go、Object-C 等;所谓静态语言,是指代码在运行的时候(简称运行时)变量的类型才可以确定的语言,比如 Python、Ruby、JavaScript、PHP、SQL等。

进一步,所以编译时,是指把代码文本转换为机器可执行文件的环境上下文,它会产出一个机器可以执行的二进制文件。所谓运行时,是指可执行的二进制文件在 CPU 上真实执行的上下文。

2.1.1 静态语言的①编写-②编译并链接-③执行过程

// cat main.go
package main

import "fmt"

func main() {
	fmt.Println("hello world")
}

当我们使用 Go 编写业务逻辑(比如上面的hello world代码)并执行 go run main.go 的时候,Go 开发工具链隐含地帮我们首先编译并链接源码生成可以执行的二进制文件,紧接着运行这个二进制文件。也就是说,go run main.go 等效于 ①go build main.go + ②./mian 这两个命令操作。

我们可以简单地认为 go build main.go 是 Go 代码的编译时,产物是一个可执行的二进制文件 main;命令./main 是 Go 代码的运行时,此时我们编写的逻辑开始在 CPU 上执行。

2.1.2 动态语言的①编写-②解释执行过程

# cat hello.py
print("hello world")

当我们使用 Python 编写业务逻辑(比如上面的代码),在执行 python hello.py 的时候,Python 解释器直接帮我们解释并执行业务逻辑。由于人与机器之间的隔阂,python 源码最终也要变成机器可以执行的代码;但是相对于静态语言,动态语言不存在编译后机器可执行的二进制产物。换句话说,Python 的解释器一边编译源码,一边执行编译生成的代码。

2.2 人生苦短,快用Python

仅仅缺省编译链接过程并不能成为选择动态语言 Python 的理由,原因很简单:但凡使用 Python 能够解决的问题,均可以使用其他非 Python 的方案解决。

基于上面的事实,并不存在必学 Python 的理由。可能 Python 只是一些细节上让完成上面列出的任务更简单,比如文件的读取、类型的转换(字符串与数字的互转)、序列号与反序列化(json字符串与json对象之间互转),等等;Python 语言本身封装了一些工具方法很容易地完成这些事情,而 Python 的第三方包进一步扩展了整个生态。

基于上面的考虑,其实可以尝试学一下 Python。

3 小结

因为 Python 提供的一些便利性,当用户量不是很多(机器没什么压力)而业务逻辑却比较繁杂(开发者编码有压力)的情况下,使用 Python 编码是一个较为明智的选择: