-
目录
python中的对象
python中,一切皆对象。每个对象由:标识(id),类型(type),值(value)组成。
1.标识用于唯一标识对象,通常对应于对象在内存中的地址。使用内置函数 id(obj) 可返回对象obj的标识。
2.类型用于返回对象存储的数据类型。类型可以限制对象的取值范围以及可执行的操作。可以使用 type(obj) 获取所属对象的类型。
3.值表示对象存储的数据的信息,可以使用 print(obj) 打印对象的值。
对象的本质:一个内存块,拥有特定的值,支持特定类型的相关操作。
-
引用的本质
在python中,变量实际上就是对象的引用。也就是说,变量存储的实际上是对象的地址,变量通过地址引用了对象。
变量位于栈内存。
对象位于堆内存。
python是动态类型语言,不需要显式声明变量的类型,根据变量引用的对象,python解释器自动确定数据类型。
python是强类型语言,每个对象都有数据类型,且只支持该类型的支持的方法。
a=3
id(a)
Out[1]: 1896181280
b=3
id(b)
Out[2]: 1896181280
type(3)
Out[3]: int
type(a)
Out[4]: int
#可以看到,变量a与b实际上只是‘3’这个int类型对象的引用
c=a
a=a+1
print(id(a))
print(id(c))
Out[6]:1896181312
1896181280
#这个例子可以看到,python中的赋值运算符实际上是将新的变量c指向了最初的实例对象,实例对象与c之间的桥梁a的改变似乎并不会影响c。这叫做链式赋值,相当于a=3,c=3.
-
标识符
-
基本用法
- 区分大小写。
- 第一个字符必须是字母或者下划线,其后的字符必须是字母,数字,下划线。如:_a,asd,a11。
- 不能使用关键字,例如:if,while,for等等。
- 以双下划线为开头和结尾的名称通常含有特殊意义,尽量避免这样的写法,例如:__init__ 是类的构造函数。
tip:可以使用 help()+keywords 查找python中的关键字信息。具体如下:
help()
Out[1]:Welcome to Python 3.6's help utility!
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.6/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics". Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".
help>
#####输入“keywords”
help> keywords
Out[2]:Here is a list of the Python keywords. Enter any keyword to get more help.
False def if raise
None del import return
True elif in try
and else is while
as except lambda with
assert finally nonlocal yield
break for not
class from or
continue global pass
-
开发中标识符命名规则
类型 | 规则 | 例子 |
模块和包名 | 全小写字母,尽量简单,多个单词之间用下划线 | math,os,sys |
函数名 | 全小写字母,多个单词之间用下划线隔开 | get_value,max |
类名 | 首字母大写,采用驼峰原则。 | Student, MyClass |
常量名 | 全大写字母,单词之间用下划线隔开 | MAX_INT |
-
变量的声明_初始化_删除_垃圾回收机制
-
变量的声明和赋值
python中变量的声明和赋值相当于将一个变量绑定到一个对象上,格式如下:变量名=表达式
最简单的赋值语句就是 a=11。在运行过程中,python解释器先运行赋值运算符右边的表达式,生成一个代表表达式运算结果的对象 11,然后将这个对象的地址赋值给变量 a ,变量 a 就成了对象 11 的一个引用。
链式赋值语句:b=a=11; a=11,b=a; 相当于语句 b=11,a=11;
注意不能写成 b=a,a=11;变量在使用前必须先被初始化,也就是要先被赋值。
#############链式赋值语句############
b=a=11
id(b)
Out[2]: 1896181536
id(a)
Out[3]: 1896181536
#可以看到,b和a都是对象11的一个引用
#下面我们让a改变
a=a+1
a
Out[5]: 12
b
Out[6]: 11
id(a)
Out[7]: 1896181568
id(b)
Out[8]: 1896181536
#可以发现,a的改变并不能影响b,所以链式赋值语句中,b也是直接指向最初的实例对象。
系列解包赋值:系列数据赋值给相同个数的变量。
#系列解包赋值
a,b,c=11,'sd',23.0
a
Out[10]: 11
b
Out[11]: 'sd'
c
Out[12]: 23.0
#如果个数不相同会报错
a,b,c=11
Traceback (most recent call last):
File "<ipython-input-13-6e560dbcb2f1>", line 1, in <module>
a,b,c=11
TypeError: 'int' object is not iterable
#报错内容是‘int’类型不是一个可迭代对象,也就是说,等号右边只要是一个可迭代对象,且这个可迭代对象的可迭代次数等于等号左边变量的个数,这个系列解包赋值语句就能成功运行。变量赋值实际上就是可迭代对象迭代时返回的值。
#下面展示两个例子:
#例子一:
a,b,c=[11,1,23]
a
Out[16]: 11
b
Out[17]: 1
c
Out[18]: 23
#例子二:
a,b,c={'a':12,'b':13,'c':'asd'}
a
Out[24]: 'a'
b
Out[25]: 'b'
c
Out[26]: 'c'
-
删除变量和垃圾回收机制
通过 del 语句可以删除不在使用的变量。
如果对象没有被引用,就会被垃圾回收器回收,清楚内存空间。但这个垃圾回收机制并不是及时的,如果某个对象引用变为0,它所占用的内存空间并不会立即被释放,而是经过一段时间后才会被释放,这个机制暂时还不清楚,望能指正。