模块一

 

一、生成器表达式


  统计文件中字符的个数:
  #a.txt
  # hello
  # world

  with open('a.txt',mode='rt',encoding='utf-8') as f:
    res = sum(len(line) for line in f)
    print(res)

  会得到11,其中包括换行符

二、模块的基础知识

  1.什么是模块


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

  2.模块的四个通用类型


    2.1 使用python编写的.py文件
    2.2 已被编译为共享库或DLL的C或C++扩展
    2.3 把一系列模块组织到一块的文件夹,文件夹下有一个__init__.py文件,该文件夹称之为包
    2.4 使用C编写并链接到python解释器的内置模块

  3.模块的三种来源


    3.1 内置模块
    3.2 第三方模块
    3.3 自定义模块

  4.为何要用模块


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

 

三、模块import的使用

 

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


  重复导入会直接引用内存中已经加载好的结果

  1.1 会产生一个模块的名称空间
  1.2 执行spam.py文件的内容,将产生的名字丢到模块的名称空间里
  1.3 在当前执行文件中拿到一个名字spam,该名字指向模块的名称空间

  #spam.py
  #money=1000

  #aaa.py
  import spam
  money=10
  print(spam.money)

  执行的结果:1000

 

2、为模块起别名 as


  对编写可扩展的代码很有用
  import spam as sm
  print(sm.money)
  和print(spam.money)是一样的



3、在一行导入多个模块

 

  import spam,os,time
  中间用逗号隔开就好

 


三、from...import...的使用



1、 from spam import money,read1


  意思就是可以调用spam中的money和read1
  和import一样,首次调用会发生同样的三件事,支持as,支持一行导入多个名字

 

2、 from...import...和import对比


  import:

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

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

3、from...import...*


  from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置

  可以使用__all__来控制*(用来发布新版本),在spam.py中新增一行:
  __all__=['money','read1'] 在另外一个文件中用from spam import *就这能导入列表中规定的两个名字


四、模块的搜索路径

 

  查找模块的优先级:


    1.内存
    2.内置模块
    3.sys.path(重点:是以执行文件为准)

 

五、区分python文件的两种用途

 

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

  作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
  if __name__ == '__main__':


六、软件开发的目录规范

 

例如:我们要写一个ATM程序
  ATM 根目录
    start 启动代码
    conf文件 内放配置文件
      seeting 代码
    lib 自定义模块 (和业务无关)
      common 代码
    core 核心代码文件 (和业务相关)
      src 代码
    db 数据文件 (用户信息)
    log 日志文件
    readme.txt 软件介绍

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章