Python为什么那么火?Python应当成为年轻人的第一款编程语言吗?学Python到底学了什么?
不如来看看我的这一期B站视频你或许就有答案了~
初识胶水语言
其实“胶水语言”一词并不像“编译语言”或者“脚本语言”一样是一个术语,它只不过是一个形象的说法。
刚接触Python的时候其实我也不理解大家为什么这样称呼它,是因为它像胶水一样好用?(可是胶水有什么好用的)
不过随着对Python了解的深入,会从多个角度感觉到:这个比喻是真滴形象!
下面通过Python的几个特点,让我们去感受一下Python作为胶水语言到底有什么特色。
一、Python是一种脚本语言
解释型语言是与编译型语言相对的一组概念。
对于编译型语言(如C/C++),当我们编写好程序以后,都要先经过“编译”这一过程,才能运行,如果对程序进行了修改,那么就要重新在来一遍“编译-运行”。
解释型语言则不同,它不需要被编译,而是逐条执行。
脚本语言是解释型语言的一个子集(定义有所增强),简单来讲,脚本语言的程序只是一段文本文字,由解释器逐条地将指令转换为字节码,再由虚拟机运行。
正是因为Python是一种脚本语言,让它具备了以下特点:
- 方便调试和执行单个命令。
比方说,当前面一段代码运行完了以后,我又想输出其中变量a
的值,那么我只需要单独执行一条命令print(a)
即可。而若是编译型语言的话(如C语言),就必须在这段代码中加入一句printf("%d",a)
并将整段代码重新编译并运行 - 交互感强,每一条语句都能给你反馈(尤其是在Jupyter Notebook等交互式记事本中)
例如,我创建一个列表并打印,再将这个列表画成折线,只用了4句话,分成了两步执行,且每一步都有一个反馈给你。这就是交互感,让你时刻清楚自己都干了些什么。
my_list = [1, 2, 3, 5, 10]
print(my_list)
[1, 2, 3, 5, 10]
import matplotlib.pyplot as plt
plt.plot(my_list)
但解释型语言的特点也导致了一些问题:
- 在一些情况下运行速度和效率不如编译型语言。
- 在所有要运行Python代码的电脑上,都必须先要安装有Python解释器。
二、Python拥有简洁、灵活的语法
Python的语法格式一直是被人称道的一件事,在这里我们从它的“简洁性”和“灵活性”来讲。
Python语法的简洁性在于:
- 无需提前声明变量
- 强制可读,具体表现为:用换行作为语句的分割,用缩进作为层次分割,省去了分号、大括号等很容易忘掉又很占行数的东西
- 不用定义主程序函数,python代码从第一个没有缩进的代码开始执行(函数/类定义除外)。
还有很多能体现Python简洁哲学的语法,就不再列举了。
Python语法的灵活性是一个更加有意思的话题。
就以打印一个整形变量的值来说,就可以有多种写法: 茴香豆的茴有几种写法?
a = 221 #赋值
print('a=' + str(a)) #通过+来连接两个字符串
print('a=%d'%a) #格式化输出
print('a={}'.format(a)) #本质是一个对str类型的方法函数
a=221
a=221
a=221
再比如说:
x = [[1], [2], [3]]
y = [3, 5, 7]
linreg = LinearRegression().fit(x, y) #实例化对象的同时对该对象调用方法
print('y=%1.0fx+%d'%(linreg.coef_[0],linreg.intercept_))
y=2x+1
在上面这个例子中,linreg = LinearRegression().fit(x, y)
这一行可能一下子让人摸不着头脑,等号左边的到底是一个什么东西啊?!
其实,这一行代码办了两件事:先创建了LinearRegression
类下的实例linreg
,然后对linreg
对象调用.fit(x, y)
方法。即:
linreg = LinearRegression().fit(x, y)
等效于
linreg = LinearRegression() #实例化
linreg.fit(x, y) #对linreg对象调用方法
上两例还算是比较中规中矩的例子,当碰到的代码多了,就总会发出“为什么这样的骚操作也可以啊?”类似的感叹,而答案只有一个:因为Python语法灵活啊~。这样看来,灵活或许不一定是个褒义词。
灵活意味着你可以有多种方法去实现同一件事情,只要掌握其中的一种就可以把事情办成;但在日后的学习中,我们一定会碰到其他人使用了你不熟悉的方法,这反而会造成不必要的困惑。
所以说,“灵活性”降低了Python入门的难度,但也无形之中增加了我们的深入学习Python时的负担。
三、Python是一种面向对象的语言
但正因为我们有了对象这一概念,我们的编程逻辑就和面向过程编程鲜明地区分开了。
在Python中,无论我们没有系统地理解过面向对象这一概念,我们其实都在自觉或者不自觉地使用面向对象编程这一概念。
例如对数组求和:
from numpy import array
my_array = array([1, 2, 3, 4, 5])
print(my_array.sum())
15
像这样,我们其实就已经是在面向对象了,求和的工作只用了一个sum()
方法就解决了。若是面向过程编程,我们则要循环、遍历、累加……
所以说,Python中面向对象编程大大地简化了编程的逻辑,只用关心“我要干什么”,而“这该怎么实现”的问题就交给库
了。
但面向对象这一概念(无论是在Python或是其他的语言中)要想理解的较为透彻,通常都是初学者的一个难点,与之相关的有:类、对象、方法、属性、实例化等一系列的概念。
并且在Python中.
这一符号很常用,但又容易混淆。在面向对象的时候我们有对象.属性
和对象.方法()
,而在导入库的时候我们又有包名.模块名
这一用法,如果不注意区分,很容易造成困惑。
四、Python拥有丰富的库
无论是数据分析、可视化、人工智能、深度学习等方面,Python都拥有完备且活跃的库可供大家使用,Python便是赶上了这一波大数据、人工智能的浪潮而火起来的。
那么为什么大家都喜欢给Python写库呢?原因在上面也都有所提及,解释型语言、简便的语法、面向对象的编程,让使用库变得很方便。用Python的人多了,给Python写库的人也就多了,Python的库多了,用Python的人也就多了……这是一个良性的生态循环。
所以从某种意义上来说,重要的不是Python,而是Python的各种库 重要的不是盾牌,是符咒
当我们对Python的语法、基础概念都熟练了以后,我们学的更多的是如何使用库,以及相关领域的专业知识。
比如数据可视化方面,我们学习matplotlib库如何画图表,如何修改图表的标题、坐标轴,我们要理解折线图、直方图、箱线图所适用的情形和特点……
这么多不同的库,我该怎么学?使用库,无非不是对象、方法、函数及其里面的参数应该怎么填。一个活跃且完善的库,一定有完善且易懂的文档供你参考,作为辅助,还可以再去翻翻大家的博客。
Python对库的依赖十分严重,在一个程序中或多或少都会用到第三方库。要想在另一台电脑上运行相同的程序,也必须得安装相应的库。
并且活跃的库经常会对版本进行升级,或许在这一个版本中用到的方法函数,在下一个版本中就被移除/改名了。这也给在不同版本的环境下代码效果的复现留下了很大的隐患。
重识胶水语言
上面列举的Python的四条特性,分别从不同方面刻画了Python作为一种胶水语言的特点:交互感强、语法简洁、编程方便、丰富的库。
Python就好像是一瓶胶水一样,拿来就能用,可以把不同的东西方便地粘在一起,组成新的代码,并且效果立竿见影。
但是胶水也有胶水的短处,我们可以方便的拿胶水糊一个纸盒子自己用,但是我们很难用胶水去钉一个铁箱子给别人。
脚本语言的特性使得Python依赖于解释器才能正常运行;过于灵活多变的语法对维护和规范带来了困扰;所有要运行Python代码的电脑上都得安装所依赖的库……
无论是Python的优势或是它带给我们的困扰,这所有的特点加在一起,造就了独一无二的Python。
拿胶水来形容它,真的是再合适不过了。
Python为什么那么火?Python应当成为年轻人的第一款编程语言吗?学Python到底学了什么?
不如来看看我的这一期B站视频你或许就有答案了~
觉得有用的话,不要吝惜评论点赞分享哦,希望大家多多包涵,有任何问题欢迎指正、讨论。
本文基于CC-BY-SA 4.0协议,欢迎转载