- 190 @property使用解释说明
- 191 标识符 is 作用
- 192 标识符 is 的特殊之处
- 193 标识符 in 的用法
- 194 对于自定义类型,判断成员是否位于序列类型中的方法
- 195 标识符 == 的作用
- 196 标识符 == 的实际应用场景
- 197 is和==有什么区别?
- 198 nonlocal关键字及使用案例
- 199 global 关键字用法及使用案例
- 200 lambda 函数的形参和返回值
190 @property使用解释说明
property(fget=None, fset=None, fdel=None, doc=None)
返回 property 属性
不适用装饰器,定义类上的属性:
class Student:
def __init__(self):
self._name = None
def get_name(self):
return self._name
def set_name(self, val):
self._name = val
def del_name(self):
del self._name
# 显示调用 property 函数
name = property(get_name, set_name, del_name, "name property")
显示的调用 property 函数定义类上的属性:
In [94]: xiaoming = Student()
...: xiaoming.name = 'xiaoming'
In [95]: xiaoming.name
Out[95]: 'xiaoming'
使用 python 装饰器 @property
,同样能实现对类上属性的定义 ,并且更简洁:
class Student:
def __init__(self):
self._name = None
@property
def name(self):
return self._name
@name.setter
def name(self, val):
self._name = val
@name.deleter
def name(self):
del self._name
In [98]: xiaoming = Student()
In [99]: xiaoming.name = 'xiaoming'
In [101]: xiaoming.name
Out[101]: 'xiaoming'
191 标识符 is 作用
is 判断标识号是否相等
is
比较的是两个对象的标识号是否相等,Python 中使用 id()
函数获取对象的标识号。
In [1]: a = [1,2,3]
In [2]: id(a)
Out[2]: 95219592
In [5]: b = [1,2,3] #再创建一个列表实例,元素取值也为 1,2,3
In [6]: id(b)
Out[6]: 95165640
创建的两个列表实例位于不同的内存地址,所以它们的标识号不等。
In [7]: a is b
Out[7]: False
即便对于两个空列表实例,它们 is
比较的结果也是 False
192 标识符 is 的特殊之处
对于值类型而言,不同的编译器可能会做不同的优化。
从性能角度考虑,它们会缓存一些值类型的对象实例。