语义描述了我们如何从那些表达式中推导出相关的含义,从而解决我们想解决的问题。
语法描述了如何将合法表达式组合在一起。
我们要选择什么样的编程语言?
1. 不管我们选什么,都有如下过程:
输入信息-提供给电脑(即源代码(source code))
经过某种计算过程
输出结果或者计算机反馈结果
在“经过某种计算过程”这一步,我们面临选择——这种选择与计算机如何处理过程并将之变为输出息息相关,这些选择有:
1. low level language uses instructions similar to internal control unit:
——move data from one location to another
低级编程语言:即我们输入的指令和物理实现很像,比如把内存中某处的数据移动到另一处,或者是执行一个简单的算术逻辑单元操作
此时,名为checker(检查器)的进程会处理低级代码,确认语法和静态语义正确,之后就会把具体的指令序列传到interpreter(解释器)的进程,解释器会按序执行指令,最后输出结果
2. a high level language uses more abstract terms invert a matrix, compute a function
高级编程语言:更抽象化,即忽略掉一些底层的东西后的抽象化编程
1.在编译型语言中,那些抽象的东西将首先被checker,像1中那样转换回低级代码,然后靠compiler(编译器)将这些检查过的指令序列转变为那些我们需要的基本计算机指令。在之后指令进入interpreter实际执行
2.在解释型语言中,和编译型语言一样先通过checker进行检查,然后通过一种特别的程序把源代码转换成一种内部中间数据结构,然后按序把每一步转换成低级机器指令来执行——这表示我们每次只对一条指令进行转换和执行
那么,这些都有什么值得权衡或者说优缺点呢?
编译型语言,代码更快——因为我们之前就把所有工作做完了,即通过编译器把指令转换成低级机器指令。但问题是如果我们代码有漏洞或者错误,当已编译的代码遇到那个错误,要找出这个错误的原因就很困难——因为我们要进入那些杂乱无章的编译指令中找出实际指令中的错误之处,这很困难。
解释型语言,会慢些,但不会很慢——因为我们要实时转换,一次一条指令。但是一旦我们遇到错误或漏洞,就能很容易地找到引起错误的地方, 因为我们能知道是在转换哪条指令时错了,从而定位bug之处。(python就是解释型语言)
Program(or script) is a sequence of definitions and commands
程序又称脚本,包含一系列定义和命令
定义指被计算机存储的东西,命令则是shell程序中python解释器实际执行的东西。
Shell只是一个程序,她允许输入命令,这些命令被计算机的操作系统直接执行,即shell使使用者得以忽略底层细节。
Command(or statement) instructs interpreter to do something
什么是指令或者说是语句?她们是指示解释器做某事的东西
一些简单的python命令:
本质上每个程序都会操作一个数据对象,每个数据对象都有一个类型,类型定义了程序可以对这个对象做的事情。
Scalar objects 与non-scalar后面会再详讲,这里先讲简单的。
Scalar objects标量对象——不可分割的
1. int——used to represent integers
2. float——used to represent real numbers
3. bool——used to represent Boolean values true and false
non-scalar 非标量对象——拥有一个可以访问的内部结构
python shell运行:
输入:3 输出3
输入3.0 输出3.0
输入true 报错
输入True 输出True
输入type(3) 输出<type ‘int’> 这里的()表示一个函数,3是表达式
Expressions表达式由操作符和数据对象一一构成
大部分是这样的形式:<object><operator><object>
Python中的除法,如果有一个是浮点数,就和数学上的除法一样。
如果都是整数,结果就是去掉余数后的商,且是整数——如果想得到余数,就用“%”代替“/”
2**3——表示2的3次方,“**”是次方运算符
a and b————a和b都是给定的布尔型表达式,则a、b都为真,这个表达式为真
a or b——其中一个为真则为真
type conversions(type casting)类型转换(强制类型转换):
输入float(3) 输出3.0
None这个关键字是python中唯一一个没有类型的值,常用来表示不存在的值
分数不能完全存储为二进制(例如,没有办法存储0.33333无限精确下去,只能进行选择存0.3333(具体存几位看标准)),这一点在其他语言也存在,同时可以预知的是,所有语言的类型转换都大有文章!