1. 不使用中间变量,交换两个变量的值
- a=a ^ b, b=a ^ b, a=a ^ b
- a, b = b , a
- a=a+b, b=a-b, a=a-b
2. python中生成器和迭代器
- 裴波那挈数列的迭代器
class Fib(object):
def __init__(self,num):
self.num = num
self.a, self.b = 0, 1
self.idx = 0
def __iter__(self):
return self
def __next__(self):
if self.idx < self.num:
self.a, self.b = self.b, self.a + self.b
self.idx += 1
return self.a
raise Stoplteraton()
- 生成器
def fib(num):
a, b = 0, 1
for _ in range(num):
a, b = b , a + b
yield a
可以通过for-in循环从迭代器对象中取出值,也可以使用next函数取出迭代器对象中的下一个值
3. init, new, __call__方法区别
- python中调用构造器创建对象属于两阶段构造过程,首先执行__new__方法获得保存对象所需的内存空间,再通过__init__执行对空间内存数据的填充(对象属性的初始化)
- __new__方法的返回值是创建好的python对象(的引用),而__init__方法的第一个参数就是这个对象(的引用),所以在__init__中可以完成对对象的初始化操作;
- __call__可以使方法变成可被调用对象