Python程序构成

Python程序可以分解为模块、语句、表达式和对象:
(1)Python程序由模块组成,模块对应于扩展名为.py的源文件;
     一个Python程序由一个或者多个模块构成;
(2)模块由语句组成,模块即Python源文件;
     运行Python程序时,按模块中的语句顺序,依次执行其中的语句;
(3)语句是Python程序的过程构造块;
     用于创建对象、变量赋值、调用函数、控制分支、创建循环、增加注释等;
(4)语句包含表达式,表达式用于创建和处理对象;

eg:解释Python脚本程序的__name__变量及其作用。
答:每个Python程序都有一个__name__变量,用来表示程序的运行方式。当作为模块导入时,__name__变量的值等于程序文件名,当直接运行程序时其值为字符串’__main__’
eg:为什么说Python采用的是基于值的内存管理模式?
答:Python采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只有一份该值,多个变量指向同一块内存地址。

Python对象和引用

对象(object)
Python是一门面向对象的语言,一切皆为对象;
程序运行当中,所有的数据都是存储到内存当中然后再运行的
而对象就是内存中专门用来存储指定数据的一块区域;
对象本质上是一个内存块,拥有特定的值,支持特定类型的运算操作;
每个对象中都要保存三种数据:标识(id)、类型(type)和值(value);

标识(id)

用于唯一标识一个对象;
id是由解析器生成的,在CPython中,id就是对象的内存地址;
对象一旦创建,则它的id永远不能再改变;
通过内置的id()函数,可以获取一个对象唯一的id标识;
# 使用内置函数id(obj)可返回对象obj的标识:
>>> obj = 123
>>> id(obj)
140714134382048

类型(type)

用于表示对象所属的数据类型;
数据类型用于限定对象的取值范围,以及允许执行的处理操作;
对象一旦创建,则它的数据类型便不能再修改;
通过内置的type()函数,可以判断一个对象的类型;
# 使用内置函数type(obj)可返回对象obj所属的数据类型:
>>> obj = 123
>>> type(obj)
<class 'int'>

值(value)

用于表示对象的数据类型的值;
对象分成两大类:可变对象、不可变对象;
可变对象的值可以改变,不可变对象的值不能改变;
通过内置的type()函数,可以获取一个对象的值;
# 使用内置函数print(obj)可返回对象obj的值:
>>> obj = 123
>>> print(obj)
123

eg:查看Python内置函数对象

>>> print(abs)
<built-in function abs>
>>> type(abs)
<class 'builtin_function_or_method'>
>>> id(abs)
1699729441792

创建实例对象

# 使用字面量创建实例对象
>>> 123
123
>>> "abc"
'abc'
# 使用类对象创建实例对象
>>> str("abc")
'abc'
>>> complex(123,456)
(123+456j)

变量和对象

对象并没有直接存储到变量中,在Python中变量更像是给对象起了一个别名;
变量中存储的不是对象的值,而是对象的id(内存地址);
在使用变量时,实际上就是在通过对象id在查找对象;
变量和变量之间是相互独立的,修改一个变量不会影响另一个变量;
变量中保存的对象,只有在为变量重新赋值时才会改变;

对象的引用

Python对象是位于计算机内存中的一个内存数据块,指向对象的引用即变量;
引用对象必须通过赋值语句,把对象赋值给变量(即把对象绑定到变量);

# 使用赋值语句把对象绑定到变量
>>> x = 1   # 字面量表达式1创建值为1的int型实例对象,并绑定到变量x
>>> y = 2   # 字面量表达式2创建值为2的int型实例对象,并绑定到变量y
>>> z = x + y  # 表达式a+b创建值为3的int型实例对象,并绑定到变量z

对象的值比较和引用判别

==运算符:判断两个变量指向的对象的值是否相同
is运算符:判断两个变量是否指向同一对象

>>> x = "abc"   # x指向值为"abc"的str型实例对象
>>> y = x       # 变量y和x一样,指向(引用)对象实例"abc"
>>> z = "def"   # z指向值为"abcd"的str型实例对象
>>> x == y
True
>>> x == z
False
>>> x is y
True
>>> y is z
False