• 生成器表达式,模块,模块的搜索路径,如何区分python文件的两种用途


    生成器表达式

    res=[i for i in range(10) if i > 5]
    print(res)

    g=(i for i in range(10) if i > 5)
    print(g)
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))


    with open('a.txt',mode='rt',encoding='utf-8') as f:
    # print(len(f.read()))

    # g=(len(line) for line in f)
    # res=sum(g)

    res = sum(len(line) for line in f)
    print(res)



    '''
    1. 什么是模块
    模块就是一系列功能的集合体

    模块分为四个通用的类别:
      1 使用python编写的.py文件(*****)

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

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

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

    模块有三种来源:
    1. 内置模块
    2. 第三方模块
    3. 自定义模块

    2. 为何要用模块
    1. 使用内置的或者第三方的模块的好处是:拿来主义,极大提升开发效率
    2. 使用自定义的模块的好吃是:将程序各部分组件共用的功能提取取出放到一个模块里,其他的组件通过导入的方式使用该模块,该模块即自定义的模块,好处是可以减少代码冗余
    3. 如何用模块

      
    money=10

    import spam
    首次导入模块会发生三件事
    1. 会产生一个模块的名称空间
    2. 执行spam.py文件的内容,将产生的名字丢到模块的名称空间里
    3. 在当前执行文件中拿到一个名字spam,该名字指向模块的名称空间

    之后的导入直接引用首次导入的成果
    import spam
    import spam
    import spam
    import spam
    import spam

    使用
    print(money)

    print(spam.money)
    print(spam.read1)
    print(spam.read2)
    print(spam.change)

    spam.read1()

    def read1():
    print('from run1.py read1')

    spam.read2()

    spam.change()
    print(money)


    补充:
    import spam as sm
    print(sm.money)

    import os,sys,spam



    
    


    from spam import money,read1,read2,change
    首次导入模块会发生三件事
    1. 会产生一个模块的名称空间
    2. 执行spam.py文件的内容,将产生的名字丢到模块的名称空间里
    3. 在当前执行文件中拿到名字read1,该名字指向模块的名称空间中的read1
    money=10

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

    def read1():
    print('from read1')

    money=111111
    read1()
    read2()
    change()
    print(money)

    import总结
    优点:指名道姓地问某一个名称空间要名字,不会与当前执行文件名称空间中的名字冲突
    缺点:引用模块中的名字必须加前缀(模块名.),使用不够简洁

    from...import总结
    优点:引用模块中的名字不用加前缀(模块名.),使用更为简洁
    缺点:容易与当前执行文件名称空间中的名字冲突


    from spam import money as m0
    print(m3
    >?"
    +9
    ',.;'
    *)


    from spam import *
    print(read1)
    print(money)
    print(read2)

    money=10
    from spam import l,money,read1,read2,change,read3

    print(money)
    print(l)
    read3()
    print(l)
    print(money)
    change()
    print(money)

    read1()


    模块的搜索路径


    查找模块路径的优先级
    1. 内存
    2. 内置模块
    3. sys.path(是以执行文件为准的)

    import sys
    print(sys.path)

    import spam
    print(spam.money)

    import time
    time.sleep(15)


    import spam
    print(spam.money)

    import time
    print(time)
    print(time.time())

    import sys
    print(sys.path)

    import sys
    sys.path.append(r'D:脱产5期内容day15aaa')

    import spam
    print(spam.money)

    from aaa import spam
    print(spam.money)


    from aaa import m1
    m1.f1()


    import sys
    print('执行文件: ',sys.path)
    from aaa import m1


    区分python文件的两种用途



    def f1():
    print('f1')

    def f2():
    print('f2')

    if __name__ == '__main__':
    f1()
    f2()

    print(__name__)
    当文件被当作执行文件执行时__name__的值为__main__
    当文件被当作模块导入时__name__的值为模块名mmm





  • 相关阅读:
    Mac MySql突然不好用了,说权限不够
    关闭Nginx的进程
    Mac 设置域名解析
    Docker的Yml文件
    Docker遇到的异常和注意点
    MySQL 查询时间段内的数据
    golang martini 源码阅读笔记之martini核心
    golang martini 源码阅读笔记之inject
    使用erlang实现简单的二进制通信协议
    使用 erlang OTP 模式编写非阻塞的 tcp 服务器(来自erlang wiki)
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10065965.html
Copyright © 2020-2023  润新知