菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
407
0

Python进阶:set和dict/对象引用、可变性和垃圾回收/元类编程/迭代器和生成器

原创
05/13 14:22
阅读数 67397

frozenset:不可变集合,无序,不重复

dict上的特性:

1. dict的key或者set的值 都必须是可以hash的(不可变对象 都是可hash的, str, fronzenset, tuple,自己实现的类 __hash__)
2. dict的内存花销大,但是查询速度快, 自定义的对象 或者python内部的对象都是用dict包装的
3. dict的存储顺序和元素添加顺序有关
4. 添加数据有可能改变已有数据的顺序

 is和==的区别:is是用来判断两个变量引用的对象是否为同一个,==用来判断应用的对象的值是否是相等。(可以理解为对象的值和地址的异同 )

元类:元类是创建类的类,对象<-class(对象)<-type

迭代器:访问集合内元素的一种方式,一般用来遍历数据,和下标访问方式不同,迭代器不能返回,一种惰性方式数据的方式

生成器:函数里只要有yield

生成器方式求斐波那契数列:

def fib(index):
    re_list = []
    n, a, b = 0, 0, 1
    while n < index:
        re_list.append(b)
        a, b = b, a+b
        n += 1
    return re_list

# 生成器求解
def gen_fib(index):
    n, a, b = 0, 0, 1
    while n < index:
        yield b
        a, b = b, a+b
        n += 1


print(fib(10))

for data in gen_fib(20):
    print(data)

  

发表评论

0/200
407 点赞
0 评论
收藏