每次接触一门新语言的时候,我都会查一下她是什么类型的语言,解释性语言还是编译型语言,相信大家也都会对这两种类型总是记不住,所以我们要先了解一下语言,程序,计算机这几个之间的关系。
首先,我们编写的程序就是一堆交给计算机用来执行我们意愿的指令,而计算机只能理解他自己的语言,也就是机器语言,她们只能识别二进制指令,但是我们编写的Java,C, C++, python等等这些都是人们自己创造的语言,是为了方便我们人类能相互交流理解的高级语言,所以我们要把这些个“人类高质量”(借个梗)语言转换成计算机能运行识别的机器语言。这个时候,我们就需要把那些高级语言编译或者解释成机器语言。而这两者是通过不同的机制进行的。
有的编程语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序(Windows 下的 .exe),比如C语言、C++、Golang、Pascal(Delphi)、汇编等,这种编程语言称为编译型语言,使用的转换工具称为编译器。
有的编程语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序,比如 Python、JavaScript、PHP、Shell、MATLAB 等,这种编程语言称为解释型语言,使用的转换工具称为解释器。
还有一些比较奇葩的语言是介于两者之间的,比如说我们经常用到的Java和C#,它们是半编译半解释型的语言,源代码需要先转换成一种中间文件(字节码文件也就是项目栏下面那个.class文件),然后再将中间文件拿到虚拟机中执行。Java 引领了这种风潮,它的初衷是在跨平台的同时兼顾执行效率;C# 是后来的跟随者,但是 C# 一直止步于 Windows 平台,在其它平台鲜有作为。
编译语言,我们编译过后可以无限运行编译的程序,也就是一次编译,无限运行,在运行的时候,我们只需要编译生成的可执行程序,不再需要源代码和编译器了,所以说编译型语言可以脱离开发环境运行。但是编译型语言不能跨平台,也就是不能在不同的操作系统之间随意切换。
首先,可运行程序不能跨平台,因为不同操作系统对可执行文件的内部结构有着截然不同的要求,彼此之间也不能兼容。而且相同操作系统不同版本之间也不可以。
源代码也不可以跨平台。不同平台支持的函数、类型、变量等都可能不同,基于某个平台编写的源代码一般不能拿到另一个平台下编译。比如说C语言中的Long类型,在Windows和Linux下字节长度都不一样。
解释型语言,每次执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的不进行任何处理。每次执行程序时可能使用不同的功能,这个时候需要转换的源代码也不一样。
因为每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言,所以计算机的一些底层功能,或者关键算法,一般都使用 C/C++ 实现,只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。
在运行解释型语言的时候,我们始终都需要源代码和解释器,所以说它无法脱离开发环境。
当我们说“下载一个程序(软件)”时,不同类型的语言有不同的含义:
对于编译型语言,我们下载到的是可执行文件,源代码被作者保留,所以编译型语言的程序一般是闭源的。
对于解释型语言,我们下载到的是所有的源代码,因为作者不给源代码就没法运行,所以解释型语言的程序一般是开源的。
解释性语言基本上是都可以跨平台的
我们所说的跨平台,是指源代码跨平台,而不是解释器跨平台。解释器用来将源代码转换成机器码,它就是一个可执行程序,是绝对不能跨平台的。
解释型语言之所以能够跨平台,是因为有了解释器这个中间层。在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解释器帮助我们屏蔽了不同平台之间的差异。
解释性语言也就有着一次解释,到处运行的说法。
我们可以将编译型语言和解释型语言的差异按照类型 原理 优点 缺点总结为:
编译型语言:通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。 编译一次后,脱离了编译器也可以运行,并且运行效率高。 可移植性差,不够灵活。
解释型语言: 由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。 跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。 一边执行一边转换,效率很低,
上面解释之后,就进入到主题了,python作为现在语言的热门,学习人工智能的必经之路。她的轻便性就让我们得知她是一个解释型语言。Python 属于典型的解释型语言,所以运行 Python 程序需要解释器的支持,只要你在不同的平台安装了不同的解释器,你的代码就可以随时运行,不用担心任何兼容性问题,真正的“一次编写,到处运行”。你所写的 Python 代码无需修改就能在你能想到的平台上正确运行。也就是说,Python 的可移植性是很强的。我相信这也是她吸引到大家的一个亮点,反正是把我的心♥都偷走了…
那接下来就让我们隆重的开始介绍python这位女嘉宾:
Python 是一种面向对象的、解释型的、通用的、开源的脚本编程语言,它之所以非常流行,我认为主要有三点原因:
Python 简单易用,学习成本低,看起来非常优雅干净;
Python 标准库和第三库众多,功能强大,既可以开发小工具,也可以开发企业级应用;
Python 站在了人工智能和大数据的风口上,站在风口上,大家都能飞起来。
(C/C++的PC时代,Java的互联网和智能手机时代,现在正是python的大数据和人工智能时代)
举个简单的例子来说明一下 Python 的简单。比如要实现某个功能,C和Java语言可能需要 100 行代码,而 Python 可能只需要几行代码,因为C语言什么都要得从头开始,而 Python 已经内置了很多常见功能,我们只需要导入库,然后调用一个函数即可。总之——人生苦短,我选python。
写注释是一个人类高质量程序员的必要功能,提高代码的可读性,而且在debug的时候,注释也可以临时移除无用的代码。一般来说,写过的程序注释应该占相当多的比重。python里面注释主要分为单行和多行注释。
单行注释就是# 注释内容
多行注释为单引号或者双引号中间加内容。
注释是不可以嵌套的。
Python 对代码的缩进要求非常严格,同一个级别代码块的缩进量必须一样,否则解释器会报 SyntaxError 异常错误。Python 使用缩进来表示代码块而不是大括号 {}。 缩进的空格数是可变的,但是同一个代码块的语句必须是相同的缩进空格数。建议四个空格数。
python解释器自带的函数即为内置函数,他可以直接使用,并不需要导入某些包。所以内置函数和标准库还是有区别的。print()就是一个内置函数。
首先,python的赋值,变量的值不是一成不变的,它可以随时被修改,只要重新赋值即可;另外你也不用关心数据的类型,可以将不同类型的数据赋值给同一个变量。也可以将一个表达式的结果赋值给一个变量。
Python为弱类型语言,弱类型语言有两个特点:
变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串。
但是弱类型还是有类型的,可以用type()内置函数输出查看其类型。
Python是弱类型脚本语言,与强类型语言整型(int short long等等)相比,其整数类型只有int类型,但是它的整数不分类型,或者说它只有一种类型的整数。Python 整数的取值范围是无限的,不管多大或者多小的数字,Python 都能轻松处理。
为了提高数字的的可读性,Python 3.x 允许使用下划线_作为数字(包括整数和小数)的分隔符。通常每隔三个数字添加一个下划线,类似于英文数字中的逗号。下划线不会影响数字本身的值。
若干个字符的集合就是一个字符串(String)。Python 中的字符串必须由双引号" “或者单引号’ ‘包围,且意思一样,没有区别。这与JS,PHP等不一样,她们双引号字符串可以解析变量,单引号字符串一律原样输出。
字符串中出现引号时不加操作就会报错,所以在引号前面添加反斜杠\就可以对引号进行转义,让 Python 把它作为普通文本对待。
此外,字符串比较长,也可以在行尾添加反斜杠\对字符串内容进行换行,这样就可以把一个长字符串写成多行。表达式也可以添加转义进行换行。
原始字符串:在普通字符串或者长字符串的开头加上r前缀,就变成了原始字符串,具体格式为:
str1 = r’原始字符串内容’
str2 = r”"“原始字符串内容”""
输出的就是原始字符串内容。
作为python3.0的新生产物,bytes必然是有独特之处的。顾名思义,她是一堆字节,所以我们可以类似称之为字节串(bytes)而她和和字符串(string)的对比之间又有什么相似之处呢:
字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。
字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。
字节串和字符串都是不可变序列,不能随意增加和删除数据。
bytes 只负责以字节序列的形式(二进制形式)来存储数据,这些数据内容可以是字符串也可以是图片视频等等。她只是记录在内存里面的原始数据,不管它是用来做什么的。
input() 是 Python 的内置函数,用于从控制台读取用户输入的内容。input() 函数总是以字符串的形式来处理用户输入的内容,所以用户输入的内容可以包含任何字符。
如果不转换数据类型的话,input接收的都会是字符串。
我们可以使用 Python 内置函数将字符串转换成想要的类型,比如:
int(string) 将字符串转换成 int 类型;
float(string) 将字符串转换成 float 类型;
bool(string) 将字符串转换成 bool 类型。
a = input(“enter a number”)
a = int(a)
明天继续。。。