zoukankan      html  css  js  c++  java
  • day15 生成器表达式 模块介绍 import导入模块 from...import导入模块 模块的搜索路径 区分python文件的两种用途 软件开发的目录规范part1

    列表生成式(生成列表)

    res=[i for i in range(10) if i > 5]
    print(res)  #[6, 7, 8, 9]

    生成器表达式

    #生成器表达式
    g=(i for i in range(10) if i > 5)
    print(g)    #<generator object <genexpr> at 0x000001DD9E4D9308>
    print(next(g))  #6
    print(next(g))  #7
    print(next(g))  #8
    print(next(g))  #9

    统计文件中字符的个数

    with open('a.txt',mode='rt',encoding='utf-8') as f:
        print(len(f.read()))  
    #PS.文件过大会导致占用内存过多
    with open('a.txt',mode='rt',encoding='utf-8') as f:
        res=0
        for line in f:
            res+=len(line)  #迭代器,缺点是占用过多的内存
        print(res)
    

    如何用一行代码实现

    with open('a.txt',mode='rt',encoding='utf-8') as f:
        res=sum([len(line) for line in f])
        print(res)
    
    with open('a.txt',mode='rt',encoding='utf-8') as f:
        g=(len(line) for line in f)
        res=sum(g)  #生成器,不会占用过多内存 sum内置__iter__,__next__
        print(res)
    

    模块

    1.什么是模块

      模块就是一系列功能的集合体

      模块分为四个通用的类别:

          1.使用python编写的.py文件(*********)

          2.已被编译为共享库或DLL的C或C++扩展

          3.把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)(*****)

          4.使用C编写并链接到python解释器的内置模块

      模块有三种来源:

          1.内置模块

          2.第三方模块

          3.自定义模块

    2.为何要用模块

          1.使用内置的或者第三方的模块的好处是:拿来主义,极大的提升开发效率

          2.使用自定义的模块的好处是:将程序各部分组件共同的功能提取去除放到一个模块里,其他的组件通过导入的方式使用该模块,

          该模块即自定义的模块,好处是可以减少代码冗余。

    3.如何用模块

          其他笔记run.py中查看

    import导入模块,在同一文件夹下,以定义阶段为准

     =============================================================================================================

    以spam.py为例来介绍模块的使用:文件名spam.py 模块名为spam

    import spam(同一个文件夹下)   

    首次导入模块会发生三件事    (使用加前缀)

    1.会产生一个模块的名称空间

    2.执行spam.py文件的内容,将产生的名字丢到模块的名称空间里面

    3.在当前执行文件中拿到一个名字spam,该名字指向模块的名称空间

    # 补充
    # import spam as sm
    # print(sm.money)
    # import os,sys,spam

    from...import导入模块

    from导模块也会运行spam.py模块

    from spam import money,read1,read2,change 

    首次导入模块会发生三件事

    1.会产生一个模块的名称空间

    2.执行spam.py文件的内容,将产生的名字丢到模块的名称空间里

    3.在当前执行文件中拿到名字read1,该名字指向模块的名称空间中的read1

    # print(money)
    # print(read1)
    # print(read2)
    # print(change)

    from的方法简单了但是也有问题就是容易与当前名称空间的名字冲突

    import总结

    优点:指名道姓地问某一个名称空间要名字,不会与当前执行文件名称空间中的名字冲突

    缺点:引用模块中名字必须加前缀(模块名.),使用不够简洁

    from...import总结

    优点:引用模块中的名字不用加前缀(模块名.),使用更为简洁

    缺点:容易与当前执行文件名称空间中的名字冲突

    补充:

    __all__=['money','read1']   可以导入模块里面所包含的函数

    ============================================================================

    查找模块路径的优先级

    1.内存

    2.内置模块

    3.sys.path(以执行文件为准的)

     加载顺序,先找内存的,再找内置模块,最后找sys.path模块

    研究模块一定要搞清楚谁是执行文件,谁是被导入文件,研究谁是执行文件,谁是被导入的模块

    区分python文件两种用途

    print(__name__)

    当文件被当作执行文件时__name__的值为__main__

    当文件被当做模块导入时__name__的值为模块名mmm

    软件目录规范

     日志不是业务逻辑,用户不用知道

      

  • 相关阅读:
    Django model 常用方法记录
    程序员的注意事项
    硬件天使的使用
    你是否应该成为一名全栈工程师?
    web技术
    6个处理上面代码异味的重构方法(手法)
    git 命定
    ie console报错
    apache 省略index.php访问
    myisam和innodb的区别
  • 原文地址:https://www.cnblogs.com/wangmiaolu/p/10048741.html
Copyright © 2011-2022 走看看