Pyhton程序 运行--->>> 模块=源文件 依次执行--->>>

 

Python引用本质:

变量:存储对象地址id。

引用:通过地址引用对象obj,然后传递值value。

 

栈内存

变量

地址

引用->

堆内存

对象

对应值

数据

 

 

 

 

数据结构中的栈和堆

栈 :这是一种连续直线存储数据结构,具有先进先出的性质。通常具有的操作有出栈、入栈(压栈)和取栈顶元素。想要读取栈中的某个元素,就必须将其之前所有的元素出栈才能完成。

堆:这是一种非连续的树形存储数据结构,每个节点都有一个值,整棵树是经过排序的。特点是根节点的值最小(或最大),且根节点的两个子树也是一个堆。常用来实现优先队列,存取随意。

 

 

 

变量与类型

在python程序中,一切数据结构都是存储在堆空间中的对象。

python程序中的变量都是引用变量,可以指向任何类型的对象。

python程序中常用的数据类型主要包括:

数字类型(int,float,complex)

字符串类型(bytestring/str,unicode)

序列类型(tuple,list)

集合类型(set,frozenset)

字典类型(dict)

补充:python中的序列类型、集合类型以及字典类型都支持异构元素,即包含的元素可以是不同类型的对象。

 

语句与表达式

常用的语句包括:

结构定义语句(函数定义和类定义)

赋值语句(普通赋值和扩展赋值)

控制语句(if-else条件、for循环、while循环、continue、break和return)

模块引入语句(import和from-import)

异常语句(异常捕获try-except/finally、异常抛出raise)

变量作用域声明语句(global和nonlocal)

上下文管理语句(with)

断言语句(assert)

常用的表达式包:

布尔表达式

算术表达式

比较表达式

简单集合构造表达式(例如,[1,2,3])

复杂集合构造表达式(例如,[x+1 for x in y])

lambda表达式

调用表达式

属性解引用表达式

元素解引用表达式

 

 

模块与包

python模块被引入到程序中时,是堆空间的一个对象。python模块中通常包含python对象的定义以及python语句。当一个模块被首次引入时,python解释器会执行对应的python文件,并同时创建一个模块类型对象。模块中的全局对象会被作为属性添加到该模块对象的属性集合中。

模块引用方式:

(1)通过关键字import

(2)通过关键字from...import...

python中的模块也是一种普通对象,可以被当作参数任意传递。

python的包是一个包含inti.py文件的文件,当首次引入一个包时,init.py文件会被默认执行。python包在程序中本质上也是一个模块对象,其特性与模块基本相同。

 

 

类与实例

 

python中的类,是一个类类型的对象,可以通过关键字class在程序任何地方定义。python中的类可以继承多个基类,子类中的属性可以覆盖父类的属性来实现重载。实例对象可以拥有自身的属性字典,不与其他实例对象共享。

 

 

函数与方法

通过关键字def在程序任何地方定义。当一个函数对象被作为参数时,其执行所需的环境也会被作为闭包进行过程间的传递。python中的lambda表达式本质上是一个匿名的函数,使用起来与函数几乎无差别。

python中的方法实则是被动态绑定闭包的函数,可分为类方法、实例方法和静态方法。

类方法:属于某个类,在调用时,其所属的类对象会被隐式地传递给方法的第一个参数。

实例方法:其对应的实例对象会被隐式地传递给该方法的第一个参数。

静态方法:不属于任何类或实例,在调用时,其效果等同于一个自由函数,不存在任何隐式参数传递 。

python动态对象

python中的对象具体可以分为不可变对象和可变对象。

不可变对象是指对象的内部属性不可以变,常见的不可变对象包括整数、浮点数、字符串和元组等。

可变对象则是指对象的内部属性是可以被任意改变的。

可变对象具有非常强的动态性,其内部属性可以被任意添加、修改或删除。

python中的反射是指可以利用一些元对象的设施来访问、更改和删除对象属性(包括方法的追加和调用等)。

python中常用的反射 函数包括hasattr()、getattr()、setattr()和delattr()等。

python中提供了exec()和eval()函数,exec()用于执行一段动态构造的语句块;eval()则用于执行一个动态构造的表达式。