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





  • 相关阅读:
    网站访问量和服务器带宽的选择
    PHP实现四种基本排序算法
    常用的PHP排序算法以及应用场景
    常见的mysql数据库sql语句的编写和运行结果
    MyBatis拦截器:给参数对象属性赋值
    《自律让你自由》摘要
    Java JDK1.5、1.6、1.7新特性整理(转)
    人人都能做产品经理吗?
    Windows下查询进程、端口
    一语收录(2016-09-18)
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10065965.html
Copyright © 2011-2022 走看看