Presentation is loading. Please wait.

Presentation is loading. Please wait.

第一次课后作业 计算对象的表示—值与类型 请给出R语言和Python语言中哪些值是头等程序对象?为什么?

Similar presentations


Presentation on theme: "第一次课后作业 计算对象的表示—值与类型 请给出R语言和Python语言中哪些值是头等程序对象?为什么?"— Presentation transcript:

1 第一次课后作业 计算对象的表示—值与类型 请给出R语言和Python语言中哪些值是头等程序对象?为什么?
请给出R语言和Python语言类型系统的类型(无类型 or 弱类型 or 强制类型 or 伪强类型 or 强类型),以及为什么是该类型?

2 计算对象的表示—值 头等程序对象 可出现在表达式中并求值 可作函数返回值 可单独存储 可以构成复杂的数据结构 可作函数参数

3 R语言中的值 数据类型: 数据结构: 函数抽象(函数名); 对象(包括类对象); 都是头等程序对象
(逻辑型、数值型、字符型、复数型)常量、变量; 数据结构: 向量、因子、矩阵、数据框、多维数组、列表、时间序列; 函数抽象(函数名); 对象(包括类对象); 都是头等程序对象

4 R语言中的非头等程序对象 值类型 是非头等程序对象的原因 向量中的元素 不能作为函数返回值 因子中的元素 矩阵中的元素 数据框中的元素
多维数组中的元素 列表中的元素 时间序列中的元素 不能作为函数返回值,也不能作为函数的参数

5 Python语言中的值 基本数据类型: 数据结构: 函数抽象(函数名); 类 对象 都是头等程序对象 字符串,整数,浮点数,虚数,布尔型;
列表、元组、字典、集合、文件; 函数抽象(函数名); 对象 都是头等程序对象

6 Python语言中的非头等程序对象 值类型 是非头等程序对象的原因 元组中的元素 不能作为函数返回值 字典中的元素 集合中的元素
文件中的元素

7 计算对象的表示—类型 静态与动态 弱/强类型 静 动 变量 有类型 无类型 动态简洁、灵活 参数 有类型 无类型 静态清晰、死板
静 动 变量 有类型 无类型 动态简洁、灵活 参数 有类型 无类型 静态清晰、死板 值 有类型 有类型 弱/强类型 无类型 LISP , Smalltalk 弱类型 变量有类型。类型兼容性大, 系统不作检查 强制类型 隐式类型强制(转换),自动截尾, 补零。显式 类型强制 PL/1 伪强类型 静态均有类型且作检查,由于不严,导出等价准则 Pascal 强类型 类型有严格定义, 均作检查 Ada

8 计算对象的表示—类型 R语言类型系统的类型 动态类型、强类型 Python语言类型系统的类型

9 第一次课后作业 计算对象的实现—存储 请给出R语言和Python语言中哪些值是可存储值,哪些值是不可存储值?

10 计算对象的实现—存储 可存储值Storable:指最小的可直接访问的可存储单元中的值。
Pascal可存储值:集合不选择更新某一元素是可存储值; Pascal, C, Ada数组可选择更新,不是可存储值。

11 计算对象的实现—存储 R语言中的可存储值和不可存储值 可存储值 不可存储值 (逻辑型、数值型、字符型、复数型)常量、变量;
向量中的元素、因子中的元素、矩阵中的元素、数据框中的元素、多维数组中的元素、列表中的元素、时间序列中的元素; 不可存储值 向量、因子、矩阵、数据框、多维数组、列表、时间序列;

12 计算对象的实现—存储 Python语言中的可存储值和不可存储值 可存储值 不可存储值 字符串,整数,浮点数,虚数,布尔型;
列表中的元素、元组、字典中的元素、集合中的元素、文件中的元素; 不可存储值 列表、元组中的元素、字典、集合、文件;

13 计算对象的实现—存储 存储模型,分为以下三种: 静态存储模型 动态存储模型 堆存储 栈存储

14 计算对象的实现—存储 R语言中的存储模型 静态存储模型 所有语言的全局变量都是静态对象; 在R语言中:
使用”<<-”运算符进行赋值的都是全局变量; 另外,在函数外声明的变量也是全局变量;

15 计算对象的实现—存储 R语言中的存储模型 动态存储模型 Everything is R lives in an environment.
An environment, like everything else in R is an object. Objects hold stuff. Environments are specialized, they can only hold two things: A frame This is just a collection of named objects. The environment’s owner aka the enclosing environment. This is just a reference to another environment.

16 计算对象的实现—存储 R语言中的存储模型

17 计算对象的实现—存储 R语言中的存储模型 Environment basics Environments

18 计算对象的实现—存储 R语言中的存储管理机制 R中的对象在内存中存于两种不同的地方:
一种是堆内存(heap),每个大小为8字节,新来一个对象就会申请一块空间,把值全部存在这里,和C里面的堆内存很像。 第二种是地址对(cons cells),和LISP里的cons cells道理一样,主要用来存储地址信息,最小单元一般在32位系统中是28字节、64位系统中是56字节。

19 计算对象的实现—存储 Python语言中的存储模型 静态存储模型 所有语言的全局变量都是静态对象; 在Python语言中:
使用global声明全局变量; 用同样的global语句可以指定多个全局变量,比如: global x, y, z。

20 计算对象的实现—存储 Python语言中的存储模型:动态存储模型 Stack — variables
Heap — data structures

21 计算对象的实现—存储 Python语言中的存储管理机制 引用计数 垃圾回收 内存池机制

22 计算对象的实现—存储 Python语言中的存储管理机制:引用计数 有两种存储方式,按值传递和按址传递: 一种是存储在stack;
一种是存储在heap上; 在python中只有按址传递,都存储在heap上; 在Python中,每个对象都有存有指向该对象的引用总数,即引用计数(reference count)。

23 计算对象的实现—存储 Python语言中的存储管理机制:垃圾回收 Python 支持两种内存回收: 一种是引用计数; 另一种是gc。
Python默认采用引用计数来管理对象的内存回收。当引用计数为0时,将立即回收该对象内存,要么将对应的block标记为空闲,要么返还给操作系统。 垃圾回收时,Python不能进行其它的任务。

24 计算对象的实现—存储 Python语言中的存储管理机制:内存池机制 Python的内存机制以金字塔行,-1,-2层主要有操作系统进行操作,
第0层是C中的malloc,free等内存分配和释放函数进行操作; 第1层和第2层是内存池,有Python的接口函数PyMem_Malloc函数实现,当对象小于256K时有该层直接分配内存; 第3层是最上层,也就是我们对Python对象的直接操作;

25 计算对象的实现—存储 Python语言中的存储管理机制:内存池机制
经由内存池登记的内存到最后还是会回收到内存池,并不会调用 C 的 free 释放掉,以便下次使用。 对于简单的Python对象,例如数值、字符串,元组采用的是复制的方式是深拷贝; 也就是说当将另一个变量B赋值给变量A时,虽然A和B的内存空间仍然相同,但当A的值发生变化时,会重新给A分配空间,A和B的地址变得不再相同;

26 计算对象的实现—存储 Python语言中的存储管理机制 Run-time Stack Heap 1,2,3,4 4
add Activation Record main Activation Record list1 module Activation Record k Heap 1,2,3,4 4 Run-time Stack k=4 def main(): main() list1=[] def add(): add() for x in range(1,k): list1.append(x) print(list1)

27

28 第一次课后作业 计算对象的连接—束定 请给出R语言和Python语言中采用的束定机制和作用域规则。

29 计算对象的连接—束定 R语言采用的束定机制和作用域规则 束定机制:无类型语言的束定机制
一个变量名可以完全动态地束定到任何类型的值或操作集上。

30 计算对象的连接—束定 R语言采用的束定机制和作用域规则 作用域规则:词法作用域 采用词法作用域的变量叫词法变量。
词法变量有一个在编译时静态确定的作用域。词法变量的作用域可以是一个函数或一段代码,该变量在这段代码区域内可见(visibility);在这段区域以外该变量不可见(或无法访问)。

31 计算对象的连接—束定 动态作用域规则 在采用动态作用域的语言里,变量与值的绑定是依赖于程序执行流程的,它是选取在运行的过程中所遇到的最近绑定。 2

32 计算对象的连接—束定 Python语言采用的束定机制和作用域规则 束定机制:无类型语言的束定机制
一个变量名可以完全动态地束定到任何类型的值或操作集上。

33 计算对象的连接—束定 Python语言采用的束定机制和作用域规则 作用域规则:词法作用域 采用词法作用域的变量叫词法变量。
词法变量有一个在编译时静态确定的作用域。词法变量的作用域可以是一个函数或一段代码,该变量在这段代码区域内可见(visibility);在这段区域以外该变量不可见(或无法访问)。


Download ppt "第一次课后作业 计算对象的表示—值与类型 请给出R语言和Python语言中哪些值是头等程序对象?为什么?"

Similar presentations


Ads by Google