python的对象与名字绑定 | 您所在的位置:网站首页 › python名字没有被定义 › python的对象与名字绑定 |
i = 1 这是一个再简单不过的赋值语句,即便是才开始学习编程的新手也能脱口而出它的含义 -- “设置变量i的值为1”。 i = 2 “将变量i的值改为2”,当看到接下来这行代码时,你脑海中肯定会立即浮现这样的念头。 这难道会有问题嘛?这简简单单的一行赋值语句其实包含了python中的三个重要概念:名字、绑定和对象。python对赋值语句作出了自己的定义: “符值语句是用来将名字绑定(或重新绑定)到某个对象的操作,而且它也可用来修改可变对象的属性或对象中所包含的成员。” 名字绑定到对象这个概念在python中随处可见,可以说是python的最基本而且最重要的概念之一。如果没有很好理解这一点,一些意想不到的结果就会在您的代码中悄然出现。 先来看一个简单例子: >>> a = {'g':1}>>> b = a*4>>> print b[{'g': 1}, {'g': 1}, {'g': 1}, {'g': 1}]>>> b[0]['g'] = 2>>> print b 出乎意料嘛?请慢慢看完这篇文章。 1. 对象 “万物皆对象”(Everything is object),这是python这种面向对象语言所倡导的理念。在我们熟悉的C++中,1只是一个整型数,而不是一个对象。但在python中,1却是一个实实在在的对象,您可以用dir(1)来显示它的属性。 在python中,所有对象都有下面三个特征: * 唯一的标识码(identity) * 类型 * 内容(或称为值) 一旦对象被创建,它的标识码就不允许更改。对象的标识码可以有内建函数id()获取,它是一个整型数。您可以将它想象为该对象在内存中的地址,其实在目前的实现中标识码也就是该对象的内存地址。 >>> class c1: pass...>>> obj = c1()>>> obj>>> id(obj)11274040 换算一下,11274040就是十六进制的0x00AC0738。 >>> id(1)7957136 这就是前面提到的1这个对象的标识码,也就是它在内存中的地址。 当用is操作符比较两个对象时,就是在比较它们的标识码。更确切地说,is操作符是在判断两个对象是否是同一个对象。>>> [1] is [1] 其结果是False,是因为这是两个不同的对象,存储在内存中的不同地方。 >>> [1] == [1] 其结果是True,是因为这两个不同的对象有着相同的值。 与对象的标识码类似,对象的类型也是不可更改的。可以用内建函数type()取得对象的类型。 有的对象的值是可以改变的,这类对象叫作可变对象;而另外一些对象在创建后其值是不可改变的(如1这个对象),这类对象叫作恒定对象。对象的可变性是由它的类型决定的,比如 |
CopyRight 2018-2019 实验室设备网 版权所有 |