入门Python,胶水语言的优势和困扰

封面

Python为什么那么火?Python应当成为年轻人的第一款编程语言吗?学Python到底学了什么?
不如来看看我的这一期B站视频你或许就有答案了~

初识胶水语言

其实“胶水语言”一词并不像“编译语言”或者“脚本语言”一样是一个术语,它只不过是一个形象的说法。

刚接触Python的时候其实我也不理解大家为什么这样称呼它,是因为它像胶水一样好用?(可是胶水有什么好用的)

不过随着对Python了解的深入,会从多个角度感觉到:这个比喻是真滴形象!

下面通过Python的几个特点,让我们去感受一下Python作为胶水语言到底有什么特色


一、Python是一种脚本语言

解释型语言是与编译型语言相对的一组概念。

对于编译型语言(如C/C++),当我们编写好程序以后,都要先经过“编译”这一过程,才能运行,如果对程序进行了修改,那么就要重新在来一遍“编译-运行”。

解释型语言则不同,它不需要被编译,而是逐条执行。
脚本语言是解释型语言的一个子集(定义有所增强),简单来讲,脚本语言的程序只是一段文本文字,由解释器逐条地将指令转换为字节码,再由虚拟机运行。

正是因为Python是一种脚本语言,让它具备了以下特点:

  1. 方便调试和执行单个命令。
    比方说,当前面一段代码运行完了以后,我又想输出其中变量a的值,那么我只需要单独执行一条命令print(a)即可。而若是编译型语言的话(如C语言),就必须在这段代码中加入一句printf("%d",a)并将整段代码重新编译并运行
  2. 交互感强,每一条语句都能给你反馈(尤其是在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)

在这里插入图片描述


但解释型语言的特点也导致了一些问题:

  1. 在一些情况下运行速度和效率不如编译型语言。
  2. 在所有要运行Python代码的电脑上,都必须先要安装有Python解释器。

二、Python拥有简洁、灵活的语法

Python的语法格式一直是被人称道的一件事,在这里我们从它的“简洁性”和“灵活性”来讲。

Python语法的简洁性在于:

  1. 无需提前声明变量
  2. 强制可读,具体表现为:用换行作为语句的分割,用缩进作为层次分割,省去了分号、大括号等很容易忘掉又很占行数的东西
  3. 不用定义主程序函数,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协议,欢迎转载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值