zoukankan      html  css  js  c++  java
  • 生成器表达式,模块,模块的搜索路径,如何区分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





  • 相关阅读:
    Delphi中的构造函数的override的问题
    一个很初级的错误 Destructor忘记override导致内存泄露
    WPF 详解模板
    再说WCF Data Contract KnownTypeAttribute
    ADO.NET Data Service
    Using ADO.NET Data Service
    资源:Localization – 本地化
    Dynamic Resource – 动态资源
    应用开发之Linq和EF
    语法之多线程
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10065965.html
Copyright © 2011-2022 走看看