编程语言(programming language)可以认为是一种计算机和人都能识别的语言。编程语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
机器语言是指机器能直接识别的程序语言或指令代码(它们无需经过“翻译”,即每一操作码在计算机内部都有相应的电路来完成它)或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码。不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言。(来源:百度百科)
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。(来源:百度百科)
高级语言(High-level programming language)是一种独立于机器,面向过程或对象的语言。高级语言是参照数学语言而设计的近似于日常会话的语言。高级语言相对低级语言有较高的可读性,更易理解。由于早期计算机行业的发展主要在美国,因此一般的高级语言都是以英语为蓝本。(来源:百度百科)
高级语言的分类方法有很多,我们在这里主要讨论其中的一种,即编译型与解释型语言。更为详尽的分类及编程语言的例子参见这篇文章。
常见的编译型语言包括Rust、C++、Java、C、C#、Objective-C、Visual Basic、Fortran等。
编译是指在源程序(你自己写的代码文件)执行之前,就将源程序中的源代码翻译为汇编语言,然后再根据硬件环境被变成符合运行需要的机器语言的目标文件。
通过编译的方式,再次使用程序比较方便、效率较高,而且依据不同的编译配置,几乎可以适用于所有平台,包括硬件及嵌入式开发,这是编译型语言的优点。但是如果应用程序需要修改,就必须先修改源代码,再重新编译生成新的目标文件才能执行,只有目标文件而没有源代码,几乎是没法修改的,而且编译好的程序在平台上的适用范围也大大缩小。
因此,大多数软件产品都是编译后发行给用户的,不仅便于直接运行,同时又使他人难于弄清程序的源代码。
解释型语言包括Python、JavaScript、Ruby、Perl、Tcl、VBScript、Lua、Erlang、F#等。
解释是指源程序并不在执行前被翻译,而是通过一个叫翻译器的程序在程序执行过程中产生易于执行的中间代码(即不产生机器语言的目标文件)。
解释器的任务是逐一(每条语句只有在执行才被翻译)将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。这种中间代码与机器代码是不同的,中间代码的解释是由解释器支持的,不能直接使用硬件。一般地来说,如果你听别人说到动态语言,大多都是指解释型语言。
由于需要边解释边运行程序,所以解释型语言通常有执行效率低的问题;而且解释器的体积相对单片机来说比较庞大,所以硬件开发是解释型语言难以胜任的工作;但是,解释型语言因为有解释器作为“中间人”,所以它们一般可以直接运行在几乎所有操作系统平台上而无需先进行编译;而且代码相对简洁,当语句出现语法错误时,可以立即引起程序员注意,使程序员在程序开发期间就能进行校正。
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆(Guido van Rossum)于1990年代初设计,作为一门叫做ABC语言的替代品。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言。随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。自20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理、Web编程、大数据处理和人工智能。2001年,Python软件基金会(PSF)成立,这是一个专为拥有Python相关知识产权而创建的非营利组织。(来源:百度百科)
在Python交互式界面(这个以后再讲)中输入“import this”并回车,你会看到一些有意思的东西,这些东西是Python设计者和程序员们必须秉持的一个理念。这里直接将它粘上来。
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea – let’s do more of those!
它们的翻译及理解如下:
Python之禅 作者:Tim Peters
优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
当存在多种可能,不要尝试去猜测,而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch是指 Guido )
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
这里给出几个网站我自己常用的网站。
点此返回笔记目录。