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

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

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

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. hibernate_Criteria_分页_去重

    触发原因:实体类间存在一对多关系,并且在一这方加载多的时候用的加载模式是eager. 解决方法:1.非分页:criteria.setResultTransformer(Criteria.DISTINC ...

  2. JSP国际化设置

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/internationalization.html: 国际化(i18n):这意味着可以使网站根据访问者的语 ...

  3. ovs ml2

    用openvswitch + ml2 构建vlan类型的tenant/project 网络 配置ml2 和 openvswitch_agent 配置 /etc/neutron/plugins/ml2/ ...

  4. Thread.run方法是同步方法

    Thread.run方法是同步方法, 线程: package com.stono.thread.page005; public class MyThread extends Thread { @Ove ...

  5. JButton点击事件

    JButton点击事件: 以前都是搞一个JFrame,放个JButton,然后用鼠标点击: 忽然之间: import javax.swing.JButton; public class Page06 ...

  6. C++学习之构造函数中的异常处理

    构造函数中可不可以抛出异常?当然可以.从语法上来说,是可以的:从实际情况来看,现在的软件系统日渐庞大和复杂,很难保证 Constructor 在执行过程中完全不发生一点异常. 那么,如果构造函数中抛出 ...

  7. ppt五种经典字体组合

    在做ppt中常常为使用哪种字体而头疼,如今将ppt的经典字体附上.希望对大家有帮助 五种经典的字体组合 标题字体 正文字体 使用场合 方正综艺简体 微软雅黑 课题汇报.咨询报告.学术研讨等正式场合 方 ...

  8. Flex 页面启动事件

    事件启动顺序 容器Preinitialize=>子组件preinitialize=>子组件initialize=>childAdd=>initialize =>子组件cr ...

  9. https://security.stackexchange.com/questions/68405/what-is-tmunblock-cgi-and-can-it-be-exploited-by-shellshock-linux-apache-w

    hndUnblock.cgi   Line #1124 : 187.38.233.45 - - [15/Jan/2018:21:36:45 +0800] "GET /hndUnblock.c ...

  10. mysql_connect 等待时间长,修改连接地址为127.0.0.1即可

    程序搬家后,运行非常慢分析流程: 1.外网的等待时间太长 2.内容等待时间也很长 3.断点查到仅仅一句 mysql_connect ("localhost",***,***)就要1 ...