Python 高级编程
列表推导
li=[i for i in range(10) if i%2 == 0]
[0, 2, 4, 6, 8]
#enumerate的用法
for i,j in enumerate(range(10)):
print (i,j)
迭代器
#yield的用法
def fabnaci():
a,b=0,1
while b<10:
yield b
a,b=b,a+b
if __name__ == '__main__':
ites=fabnaci()
for i in ites:
print (i)
访问超类中的方法
class a():
def __init__(self):
print ("a __init__ ")
class b(a):
def __init__(self):
super(b, self).__init__()
print ("b __init__")
槽
class person():
__slots__ = ['age']
def __init__(self,name,age):
self.name=name
self.age=age
if __name__ == '__main__':
p=person("libai",'100')#AttributeError: 'person' object has no attribute 'name'
print(p.name) #AttributeError: 'person' object has no attribute 'name'
class person():
__slots__ = ['age']
def __init__(self,age):
self.age=age
if __name__ == '__main__':
p=person('100')
print(p.age)
元编程
class gj(object):
#必须返回一个实例
def __new__(cls, *args, **kwargs):
print("__new__ called")
return object.__new__(cls)
def __init__(self):
print ("__init__ called")
if __name__ == '__main__':
gj()
Python中命名风格
CamelCase(每个单词首字母大写)
mixedCase(和CamelCase类似,第一个单词首字母小写)
UPPERCASE(大写)ER_CASE_WITH_UNDEGSCORES(大写并且带下划线)
lowercase(小写)和lower_case_with_underscores(小写且带下划线)
前缀和后缀下划线,前后最下划线用来标记私有和特殊的元素
命名指南
使用is和has前缀命名布尔元素
用复数形式命名序列元素
用显式的名称命名字典
避免通用名称
避免现有名称
PS:后续再加