1.Python中几个概念
1、什么是对象?
Python中一切皆对象。对象是Python对数据的抽象。Python程序中所有数据都是由对象或者对象之间的关系表示的(代码也由对象来表示)。
每个对象都有:
1、标识(id)
2、类型(type)
3、值(value)
对象的标识在创建以后不会改变,对象标识(id)可以使用id()函数得到(一个整数标识)。可以使用 is 操作符可以比较两个对象的标识(id),来判断两个变量是否绑定到同一个对象。
对象的类型决定对象所支持的操作,例如:可求长度吗?,求最大值?,能做累加?等等。也定义了该类对象的可能值。使用type()函数可以获得对象的类型。在Python中类型也是对象。和对象标识一样,对象的类型也是不能改变的。
2、可变对象、不可变对象
有些对象的值可以改变。可以改变值的对象称为“可变对象”,一旦创建后其值不能改变的对象称为“不可变对象”。
有种情况:一个不可变的容器对象内部包含了一个可变对象的引用,当可变对象的值被改变后,不可变容器对象的值会随着可变对象的值而变化。但是容器仍然被认为是不可变的(因为容器包含的对象集合不能被改变)。
图:元组是不可变对象
a是列表,可变对象;b是元组不可变对象,b元组内包含对列表a的引用。当a列表中的值被修改后,元组b引用也会跟着改变。
一个对象的可变性是由它的类型决定的,如:数字,字符串,元组是不可变的;列表,字典是可变的。
3、对象销毁与垃圾回收
对象不需要显示的销毁,当它们不可访问时,它们可被解释器自动回收。回收可能有延迟,这主要取决于垃圾回收实现的机制。Cpython目前使用引用计数方案,具体请参考GC模块文档。有些对象包含“外部”资源的引用,如:打开文件和窗口,这类对象考虑到当释放对象时,垃圾回收不一定发生,所以这类对象提供了显示的方法释放资源,通常时提供一个close()方法(函数)。对于这类对象建议(必须)程序显示的关闭这类对象。
对于不可变类型,计算新值的操作实际上可以返回具有相同类型和值的任何现有对象的引用,而对于可变对象则不允许这样做。例如,在a = 1之后,b=1,a和b可以根据值的实现而引用同一个对象,也可以不引用同一个对象,但在c = [];d=[]之后,c和d保证引用两个不同的、唯一的、新创建的空列表。(注意,c = d = []会将相同的对象分配给C和d)
Python中有内建数据类型,也有自定义类型。Python语言升级也可能增加数据类型,如:有理数,有效存储整数数组等,通常会通过标准库实现这些类型。
4、什么是变量?
程序在执行过程中需要处理数据,比如给定三个人的年龄,计算其平均年龄。需要保存三个人的年龄,然后计算,计算后需要保存平均年龄。程序设计时,便软件方便通常需要给被处理的数据起个名字,如:age_xiaoming,age_xiahong,age_xiaoli,age_avg等等。
这个例子中计算平均年龄方法可以用:
age_avg = (age_xiaoming + age_xiahong + age_xiaoli) / 3
给定3个人的年龄不同,则可以计算不同的平均年龄组合。以上计算过程中,3在计算中是不变的,其他4个量的值是变化的。
在程序中,3这种不变的量,称为“常量”,类似其他四个值会改变的的量称为“变量”。变量在程序这几中式非常重要的概念,任何语言都需要变量。
Python中变量就是对象的引用(Python中变量会绑定到对象),通过变量就可以使用对象(获得对象的值、属性,修改对象的值、属性,调用对象的方法等等)。
一个对象可以和多个变量绑定,绑定一次,对象就被引用一次,对象的引用计数器就变化一次。绑定和解除绑定都会使对象的引用计数发生变化。当对象的引用计数为0就可能被Python解释器作为垃圾回收(内置对象除外,如,小整数对象)。
2.Python变量
Python变量需要先创建再使用,使用未创建的变量将报语法错误。关于Python变量:
1、变量存放到内存中,创建一个变量就要在内存中开辟一块空间。
2、通常需要给这个这个分配的内存起个名字,变量名。
3、Python变量需要和对象绑定,可通过变量使用对象。
4、Python变量可以创建同时绑定到一个对象。
5、Python变量绑定对象后,可以重新绑定到新的对象。
6、Python变量绑定新的对象后,和原来的对象解除绑定。
7、Python变量的数据类型,取决于绑定的对象,对象什么类型,变量就什么类型。
8、Python变量的类型是动态变化的(动态类型)。、
9、变量本身也是对象(Python中一切皆对象)
1、创建变量
Python变量在第一次被赋值时创建,变量赋值使用赋值语句。变量赋值语句基本语法:
变量名 = 对象
Python中赋值使用 = (等号)。
注:变量赋值是语句,而不是表达式。
如:s = “123456”
创建一个s变量,绑定到字符串对象”123456”
创建一个变量过程通常是:
1、内存分配空间(可能创建对象和变量)
2、建立名字和变量的对应关系
3、变量和对象绑定
变量只有被创建以后才能使用。
上图中:
a = 5 创建一个变量a,绑定到int型对象5,
b = 10 创建对象b,绑定到int对象10
c = a + b,创建对象c,绑定到a+b产生的新对象,
x = d + 2 d未创建,所以报NameError错误。
2、多个变量可以绑定到同一个对象
a绑定到10,b=a,b通过a绑定到10,c=b也通过b绑定到10。
内存中每个对象都有一个唯一的id,使用id()函数可以查看对象id。
is 是判断两个变量是否绑定到同一个对象,id相同认为是同一个对象。a,b,c绑定到同一个对象,所以对象id相同,所以a is b is c 返回布尔True(真)。
4、对象什么也不绑定
将对象绑定到None对象,即可实现。
a = 1,a绑定到对象1,a = None,a绑定到对象None,和1解绑。
5、查看对象的引用计数
使用sys模块的getrefcount方法可以查看对象的引用计数。sys模块在标准库,使用需要先导入。
1、首先a=”1234567”,创建a变量绑定到对象”1234567”
2、调用sys.getrefcount(a)获得对象”1234567”的引用计数,这里显示2是因为a=”1234567”引用一次对象,调用sys.getrefcount(a)时,又引用一次对象,所以是2。
3、b = a,引用计数加1
4、c = b 引用计数加1
5、b = None后,b和“1234567”解绑,所以引用计数减1
6、c = None后,c和”1234567”解绑,所以引用计数减1
6、变量重新绑定对象
s = “123456”
s = 1
这个过程中,变量第一次被创建时绑定到字符串对象,第二次绑定到对象1.
注:变量第一次赋值是创建变量,第二次赋值是重新绑定对象。
7、小整数对象池
为了提高效率,Python解释器在内存中预先创建了一些对象,避免频繁创建和销毁这些对象。小整数只创建一次,常驻内存,不会被回收。如下例子:
上例中,a = 1,b = 1,a和b绑定到一个对象,而a = 100000,b = 100000,Python在内存中创建了两个对象值都是100000,a和b分别绑定到不同的对象。
Python小整数对象:[-5,256]
大整数对象,如图在解释器交互模式下命令行输入a=100000,创建一个大整数对象,b=100000,还会再创建一个大整数对象。
注:以上动作是在命令行交互一次一个语句的情况下,Python解释器没有对代码优化是的。
一旦优化,将与此不同。
如上图,在函数内,或则模块内,或者写成.py程序在命令行运行,解释器都会优化代码。
8、获得对象大小
使用对象的__sizeof__()方法可以获得对象的大小。
3.变量命名规则
变量命名规则:
1、变量名有英文字母、数字、下划线构成,不能有数字开头。
2、变量名区分大小写:a和A是不同的变量
3、变量名不能使用Python内置的关键字
关键字:
4、命名不建议使用小写的l(小写L),I(大写i),O(大写o)等容易误认的单个字母。
4.赋值语句其他形式
符合赋值
5.交换变量赋值
a,b = b, a
不使用中间变量,可以交换两个变量的值。
6、变量删除
使用del语句可以删除一个变量
语法:del 变量…
零基础小白到大神之路,欢迎加裙 四七四五三四九五一,群里有免费python课程,还有大量干货哦
使用del命令可以同时删除多个变量,变量删除后不再使用会报错,可以使用该名字重新创建。
领取专属 10元无门槛券
私享最新 技术干货