1.动态创建类
使用 type 动态创建类, 语法
1 2 3 4 5 6
| class Test(): pass
Test = type('Test', (), {})
|
1 2 3 4 5
| Test = type('Test', (), {'name':'peiqi'})
class Test(object): name='peiqi'
|
1 2 3 4 5 6
| def say(): print('hello python')
Test = type('Test', (), {'say':say})
|
2.’_ slots _‘
限制动态给类添加属性。仅对当前实例起作用,对继承的子类不起作用
1 2
| class person(object): __slots__ = ('name', 'age')
|
3.生成器-generator
一边循环一遍计算的机制.
特点: 01.节约内存 02.迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
1 2 3 4 5 6 7
| g1 = (x for x in range(100))
next(g1)
for x in g1: print(x)
|
1 2 3 4 5 6 7 8 9 10 11 12
|
def fib(times): s = 0, a,b = 0, 1 while s < times: print(b) a, b = b, a+b s = s+1 return 'None'
|
生成器都是 Iterator 对象,但 list\ dict\ str 虽然是 Iterable,却不是 Iterator.
把 list、dict、str 等 Iterable 变成 Iterator 可以使用 iter() 函数
4.迭代器
可以被 next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。
可迭代对象
可以使用 isinstance()判断一个对象是否是 Iterable 对象
1 2 3 4 5 6 7
| from collections import Iterable
isinstance([], Iterable) True
isinstance('abc', Iterable) True
|
凡是可作用于 for 循环的对象都是 Iterable 类型
凡是可作用于 next()函数的对象都是 Iterator 类型
集合数据类型如 list、dict、str 等都是 Iterable 但不是 Iterator, 可以通过 iter()函数获得一个 Iterator 对象
5.闭包
函数内部函数对外部函数变量的引用(非全局变量),则称内部函数和这个变量为闭包。
1 2 3 4 5 6 7 8
| def sum(number1): def sum2(number2): return number1 + number2 return sum2
res = sum(100) print(res(10))
|
6.装饰器
可以在不改变原函数的基础上对函数进行扩展。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
def log(func): def wapper(): print('heiheihei') func() return wapper
@log def cat(): print("猫吃鱼")
|
1 2 3 4 5 6 7 8 9
| def log(func): def wapper(): print('...') func() return wapper
@log def say(): print('hello python')
|
1 2 3 4 5 6 7 8 9 10
| def log(func): def wapper(text): print('do something ...') func(text) return wapper
@log def say(text): print(text)
|
1 2 3 4 5 6 7 8 9
| def log(func): def wapper(*args, **kwargs): print('do something...') func(args, kwargs) return wapper
@log def say(*args, **kwargs): print('do something..')
|
1 2 3 4 5 6 7 8 9 10 11
| def log_args(name='log'): def log(func): def wapper(*args, **kwargs): print('do something...') func(args, kwargs) return wapper
@log('say') def say(*args, **kwargs): print('do something..')
|