列表字典推导式

1、pep8规范
  • 代码编排: 缩进4个字节,行长 80
  • 函数间 /函数内/文件结尾 空行
  • 单行不要import导入多个库,模块内用不到的不要import
  • 注释
    • 函数和类尽可能添加__doc__
    • 引入外来算法或者配置时需在注释中添加源链接,表明出处
    • 单行注释,块注释
  • 命名
    • 包名 、模块名、函数名、方法名全部使用小写,用下划线连起来
    • 类名、异常名使用capwords的方式,异常名结尾加Error或Wraning后缀
    • 全局变量尽量使用大写,一组同类型的全局变量要加上统一前缀。
    • 常量全部使用大写
    • 函数名必须有动词如do_something的局势
    • 自定义的变量名、函数名不要与标准库中的名字冲突
    • pip install pep8
2、深浅拷贝
  • a = [1, 2, 3]
    b = [a] * 3 #[ [1,2,3], [1,2,3],[1,2,3]]
    print(b)
    c = copy(b)
    d = deepcopy(b)
    e = loads(dumps(b,4))
    b[1].append(999)  #[[1,2,3,999],[1,2,3,999],[1,2,3,999]]  因为[1,2,3]同一个内存地址
    c[1].append(999)  #[[1,2,3,999,999],[1,2,3,999,999],[1,2,3,999,999]]
    d[1].append(999) #[[1,2,3,999],[1,2,3,999],[1,2,3,999]]  #深拷贝 所有跟上面的不是同一个,但他们内部用的时同一个
    e[1].append(999) #[[1,2,3,999],[1,2,3,999],[1,2,3,999]]  #序列化存到文件中,取出来类似于深拷贝
    # 所有跟上面的不是同一个,但他们内部用的时同一个
  • 对于不可变对象来说不存在深复制一说,都是浅复制。

  • 浅拷贝(copy()):拷贝父对象,不会拷贝对象的内部的子对象,子对象只是引用计数增加

    深拷贝( copy.deepcopy()):完全拷贝父对象跟子对象

    对于单层的可变对象来说它两都一样,如果可变对象内层嵌套了可变对象,浅拷贝只复制最外层,开辟内存空间,引用内层的,深拷贝全部复制,开辟内存空间。

3、迭代器,生成器
  • 可以直接for-in 循环的数据类型都被称为可迭代对象(iterable)

    list、set、tuple、dict 、string 是可迭代对象,不是迭代器

    l2=iter(list1) 将可迭代对象转换为迭代器

  • iterator:任何实现了__iter____next__方法的对象都是迭代器

    • __iter__返回迭代器自身
    • __next__返回容器的下一个值
    • 如果容器中没有更多元素,则会抛出Stoplterration异常
  • generator:这种一边循环一边计算的机制,称为生成器,生成器其实是一种特殊的迭代器,不需要自定义__iter____next__

    • 生成器函数(使用了yield),遇到yield时函数会暂停保存当前的所有运行信息,并在下一次执行__next_-方法时从当前位置运行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值