1.描述符
1.描述符就是将某种特殊类型的类的实例指派给另一个类的属性,特殊类型的类即实现下面某个或者全部的方法
- 访问属性 __get__(self,instance,owner)
返回属性的值
- 分配属性时调用 __set__(self,instance,value)
无返回值
- 删除时 __delete__(self,instance)
无返回值
class A:
def __get__(self,instance,owner):
print('__get__', instance, owner)
def __set__(self,instance,value):
print('__set__', instance, value)
def __delete__(self,instance):
print('__delete__', instance)
class Test:
x = A()
t = Test()
t.x # __get__ <__main__.Test object at 0x000002B03BE9A550> <class '__main__.Test'>
print(t) # <__main__.Test object at 0x000002785C3FA550>
print(Test) # <class '__main__.Test'>
t.x = 20 # __set__ <__main__.Test object at 0x000002785C3FA550> 20
del t.x # __delete__ <__main__.Test object at 0x0000024B0EC0A550>
2.描述符与property(property()函数就是描述符类)
class MyProperty:
def __init__(self,fget = None,fset = None,fdel = None):
self.fget = fget
self.fset = fset
self.fdel = fdel
def __get__(self,instance,owner):
return self.fget(instance)
def __set__(self,instance,value):
self.fset(instance,value)
def __delete__(self,instance):
self.fdel(instance)
class A:
def __init__(self):
self.num = None
def getNum(self):
return self.num
def setNum(self, value):
self.num = value
def delNum(self):
del self.num
x = MyProperty(getNum,setNum,delNum) # 与property类似
a = A()
a.x = 20
print(a.x) # 20
print(a.num) # 20
del a.num
3.列表生成式
可用range(1,n)生成[1,2,3….n]的列表
>>> list(x * x for x in range(1,11))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.迭代
通过for循环称为迭代
a = {"语文":90,"数学":100,"python":100}
for k,v in a.items():
print("%s-->%d" %(k, v))
--------------
语文-->90
数学-->100
python-->100
1.Iterable判断对象是否可迭代对象
from collections import Iterable
a = {"语文":90,"数学":100,"python":100}
flag = isinstance(a,Iterable)
print("对象是否可迭代:" , flag) # True
5.生成器generator
可以通过列表生成式生成列表,也可通过生成器generator一边循环一边计算的机制生成列表
a = (x * x for x in range(1,11))
print(a) # a为生成器
print(next(a))
print(next(a))
next(a)没有下一个元素会抛出StopIteration异常
------------------
b = (x * x for x in range(1,11))
for item in b:
print(item)
1.yield语句
遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
方法中出现yield则说明这个函数不是普通函数而是一个generator
yield 返回后面的值相当于return
def fun():
print('one print')
yield 111
print('two print')
yield 222
print('three print')
yield 333
f = fun()
for item in f:
print('item的值为%d' % item)
-----------
one print
item的值为111
two print
item的值为222
three print
item的值为333