python
随堂小记
1_ 私有属性的使用:
属性名前加双下划线(例: __m )
>>> class A:
__m=10
>>> a=A()
>>> a.m
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
a.m
AttributeError: 'A' object has no attribute 'm'
2_ pass 在类中的作用:空类时使用
>>> class B:
pass
>>>
3_ property(getX , setX , delX )函数的作用:
整合 getX(),setX(),delX()于一体
>>> class A:
def __init__(self,x):
self.__x=x
def setX(self,y):
self.__x=y
def getX(self):
return self.__x
def delX(self):
del self.__x
m=property(getX,setX,delX)
>>> a=A(5)
>>> a.getX()
5
>>> a.m
5
>>> a.m=10
>>> a.getX()
10
>>>
4_ 列表推导式:
>>> list1=[i for i in range(10) if i % 2 ==0]
>>> list1
[0, 2, 4, 6, 8]
等价于:
>>> list1=[]
>>> for i in range(10):
if i % 2 ==0:
list1.append(i)
>>> list1
[0, 2, 4, 6, 8]
>>> list1=[[1,2,3],[4,5,6],[7,8,9]]
>>> list2=[i for row in list1 for i in row]
>>> list2
[1, 2, 3, 4, 5, 6, 7, 8, 9]
等价于:
>>> list2=[]
>>> for row in list1:
for i in row:
list2.append(i)
>>> list2
[1, 2, 3, 4, 5, 6, 7, 8, 9]
5_ 迭代器
两个BIF:
iter() :将之转换为迭代器,对应魔法方法__iter__(self)
next(): 迭代返回啥 ,对应的魔法方法 _next_()
for循环迭代器的实现原理
>>> string='jcy'
>>> for each in string:
print(each)
j
c
y
>>> it=iter(string)
>>> while True:
try:
print(next(it))
except StopIteration:
break
j
c
y
>>>
迭代器的实现(魔法方法)
>>> class fibas:
def __init__(self,n=20):
self.n=n
self.a=0
self.b=1
def __iter__(self):
return self
def __next__(self):
self.a,self.b = self.b,self.a+self.b
if self.a > self.n:
raise StopIteration
return self.a
>>> fib=fibas()
>>> for each in fib:
print(each)
1
1
2
3
5
8
13
6、python编码问题
A编码 -----> decode(‘A编码’) -----> unicode 编码 ------> encode(‘B编码’) -------> B编码