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()则用于执行一个动态构造的表达式。