语义描述了我们如何从那些表达式中推导出相关的含义,从而解决我们想解决的问题。

语法描述了如何将合法表达式组合在一起。

我们要选择什么样的编程语言?

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(具体存几位看标准)),这一点在其他语言也存在,同时可以预知的是,所有语言的类型转换都大有文章!

(2)麻省理工:计算机科学和 Python 编程导论的更多相关文章

  1. jacky解读麻省理工《计算机科学与Python编程导论》第1集

    文:@数据分析-jacky(朱元禄) (一)导言 本课程讲的中心思想就是五个字:计算机思维 Python只是辅助工具,是辅助大家理解计算机思维,仅此而已 急功近利是人性,适得其反是结果:我们看到有很多 ...

  2. (1)麻省理工:计算机科学和 Python 编程导论

    本门课用的语言是python2.7,我的主要学习语言是C++11,所以不是特殊说明,则认为和C++中的是一样的(不管是语法还是表达式),当然,也有我不懂而错认为与C++一样的东西~ Week1 第一讲 ...

  3. Python编程导论第2版|百度网盘免费下载|新手学习

    点击下方即可免费下载 百度网盘免费下载:Python编程导论第2版 提取码:18g5 豆瓣评论: 介绍: 本书基于MIT 编程思维培训讲义写成,主要目标在于帮助读者掌握并熟练使用各种计算技术,具备用计 ...

  4. MIT 计算机科学及编程导论 Python 笔记 1

    计算机科学及编程导论在 MIT 的课程编号是 6.00.1,是计算机科学及工程学院的经典课程.之前,课程一直使用 Scheme 作为教学语言,不过由于 Python 简单.易学等原因,近年来已经改用 ...

  5. (麻省理工免费课程)C语言内存管理和C++面向对象编程

    此课程有全部讲义和习题. 课程描述实在得令人发指.翻译如下: 您是否由于自己的Python程序比同僚们的C程序慢而垂头丧气?你是否想不用JAVA实现面向对象?加入我们,学习C和C++吧!我们带您从简单 ...

  6. 麻省理工《C内存管理和C++面向对象编程》笔记---第一讲:认识C和内存管理

    最近一年都在用.net和Java,现在需要用C了.昨天看到博客园首页的麻省理工开放课程,就找来看看,正好复习一下.这门<C内存管理和C++面向对象编程>不是那种上来就变量,循环的千篇一律的 ...

  7. python编程入门之简介

    引用百度百科: Python是一种面向对象.直译式计算机程序设计语言,由荷兰人Guido van Rossum发明于1989年,1991年发行第一个公开发行版.它常被昵称为胶水语言,它能够很轻松的把用 ...

  8. Linux运维人员如何学习python编程

    Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...

  9. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

随机推荐

  1. Mycat集群方案收集(待实践)

    先收集,后续再实践. 我想,市面上开源方案中,涉及到高可用和负载均衡的部署,无论是哪一个产品应用,都基本离不开LVS+Keepalived+HAProxy+Nginx等等. 下面是收集的教程: htt ...

  2. SSD硬盘安装系统后要做的事

    1***cmd>fsutil behavior query DisableDeleteNotify 0如果返回值是0,则代表TRIM处于开启状态:反之如果返回值是1,则代表TRIM处于关闭状态2 ...

  3. A. Polo the Penguin and Strings

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  4. NYOJ 298-点的变换(经典矩阵解决点平移、缩放、翻转和旋转)

    题目地址:NYOJ 298 思路:该题假设用对每一个点模拟的操作.时间复杂度为O(n+m),结果肯定超时.然而利用矩阵乘法能够在O(m)的时间内把全部的操作合并为一个矩阵,然后每一个点与该矩阵相乘能够 ...

  5. iOS下JSON反序列化开源库

    iOS下JSON字符串反序列化成对象.在正式的项目中比較常见.例如以下几个经常使用开源库.能够依据个人喜好任选其一: 1. JSONModel: https://github.com/icanzilb ...

  6. SoapUI中的RegEx

    在for Content matching RegEx中

  7. Robot Framework 初学者上手资料

    首先要声明一下这是从http://www.cnblogs.com/yufeihlf/p/5949984.html拷贝的. 在这里只是自己的一个笔记,方便日后添加.修改内容. 总结下Robot Fram ...

  8. CSYZDay1模拟题解

    T1.game [问题描述] LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵.第一行的数字是1,2,…M,第二行的数字是M+1,M+2…2*M,以此类推,第N行的数字是(N-1)*M+ ...

  9. Ural 1517. Freedom of Choice 后缀数组

    Ural1517 所谓后缀数组, 实际上准确的说,应该是排序后缀数组. 一个长度为N的字符串,显然有N个后缀,将他们放入一个数组中并按字典序排序就是后缀数组的任务. 这个数组有很好的性质,使得我们运行 ...

  10. 1998 NOIP 拼数 string 和sort的新理解

    题目:https://www.luogu.org/problemnew/show/P1012 今天真是长了见识.这道题做了十几分钟,用模拟愣是调不出来.直到我看了题解——(当场去世)…… 题的意思是n ...