python-13自定义模块1包

day12 回顾:

  • 装饰器
    def 装饰器函数名(被装饰函数形参):
    创建闭包
    return 闭包

    @装饰器函数名
    def 被装饰函数(形参列表):
    pass

    被装饰函数(实参列表)

  • 函数的文档字符串:
    def 函数名(…):
    ‘文档字符串’

    >>> help(函数名)
    __doc__属性
    函数名.doc = ‘文档字符串’

  • 模块
    模块内通常有 数据,函数,类

  • 四类模块:
    内建模块
    标准库模块
    第三方模块
    自定义模块

  • 模块的导入语句有三种:
    import 语句
    import sys
    sys.path
    from import 语句
    from sys import path
    print(path)
    from import * 语句
    from sys import *
    print(path)

  • dir() 函数

  • 三个模块:
    math
    time
    sys

day13笔记:

自定义模块

  • 要求:
    模块文件名后缀必须为.py结尾
    模块文件名必须是合法的标识符
    避免名称和内建模块名冲突

  • 导入方式:
    import 自定义模块名
    from 自定义模块名 import 属性
    from 自定义模块名 import *

  • import 语句 搜索模块的路径顺序

    1. 搜索内建模块
    2. 搜索程序运行时的路径(当前工作目录)
    3. 搜索sys.path提供的路径
      可以在sys.path里添加自定义的路径
      如:

      import sys
      sys.path.append("/home/tarena")
      imoprt mymod
      #可以导入/home/tarena/mymod.py这个模块

  • 模块化编程的优点:

    1. 有利于多人合作开发
    2. 使代码更加易于维护
    3. 提高代码的复用率
    4. 模块化编程有利于解决函数名和变量名冲突(模块内的变量的作用域为模块内为全局)
  • 模块的加载过程:
    在模块导入时,模块的所有语句会执行
    如果一个模块已经导入,则再次导入时不会重新执行模块内的语句

  • 模块的重新加载
    import mymod
    import imp
    imp.reload(mymod) # 重新加载mymod模块

  • 模块被导入和执行的过程:

    1. 搜索相关的路径找模块文件.py
    2. 判断是否有此模块对应的.pyc文件.如果pyc文件比.py文件新则直接加载.pyc文件,否则用.py文件重新生成.pyc文件并加载
  • pyc 模块的编译
    编译 执行
    mymod.py ----> mymod.pyc ----> pytyon3

  • 模块的预置属性
    __doc__属性绑定模块的文档字符串
    模块的文档字符串是模块内第一个没有赋值给任何变量的字符串

    __file__属性
    file 用来绑定模块所对应的文件路径名

    __name__属性

    • 作用:
      1. 记录模块名
      2. 用来判断是否为主模块
        说明:
        1.当此模块为主模块运行时,__name__绑定’main
      3. 当此模块不是主模块运行,而是被其它模块导入时,此模块名为模块文件.py前面的模块名
        注:
        主模块是指最先被python解释执行器执行的模块
  • 模块的 all 列表
    __all__列表是一个用来存储可导入属性的字符串列表

    • 作用:
      限制用from xxx imoprt * 语句导入时导入部分属性,而不是全部属性
  • 模块的隐藏属性:
    模块中以’_’ 开头的属性,在from xxx import * 导入时将不被导入,通常称这些属性为隐藏属性

  • 随机模块 random

    • 作用:
      用于模拟或生成随机输出的模块
      文档参见:
      python_base_docs_html/随机模块random.html
  • 练习:
    猜数字游戏:
    随机生成一个0~100之间的整数,用变量x绑定
    让用户输入一个数y.输出猜数字的结果
    1) 如果y等于生成的数x,则提示"恭喜您猜对了",并退出程序
    2) 如果y大于x,则提示"您猜大了", 然后继续猜下一次
    3) 如果y小于y,则提示"您猜小了", …
    直到猜对为止,最后显示用户猜数字的次数后退出程序

包(模块包) package
  • 包是将模块以文件夹的组织形式进行分组管理的方法

  • 作用:
    将一系列模块进行分类管理,有利于防止名字冲突
    可以在需要时加载一个或部分模块而不是全部模块

示例:

    mypack/
        __init__.py
        menu.py
        games/
            __init__.py
            contra.py
            supermario.py
            tanks.py
        office/
            __init__.py
            excel.py
            word.py

  • 包的导入:
    同模块的导入规则基本相同

  • 语法:
    import 包名 [as 包别名]
    import 包名.模块名 [as 模块新名]
    import 包名.子包名.模块名 [as 模块新名]

    from 包名 import 模块名 [as 模块新名]
    from 包名.子包名 import 模块名 [as 模块新名]
    from 包名.子包名.模块名 import 属性名 [as 属性新名]

    from 包名 import *
    from 包名.模块名 import *

  • init.py 文件
    此文件是常规包内必须存在的文件,此文件会在包被导入时自动调用

    • 作用:
      编写此包的内容
      在内部填写包的文档字符串
      init.py内可以加载此包所依懒的一些其它模块
      示例见:
      mypack/init.py
  • 包内的__all__列表
    作用:
    用来记录此包中有哪儿些子包或模块在from import *语句导入时需要被导入

  • 说明:
    __all__列表只对from xxx import *语句中起作用

  • 包的相对导入
    包的相对导入是指包内模块的相互导入

  • 语法:
    from 相对路径包或模块 import 属性或模块名

    from 相对路径包或模块 import *

  • 相对路径:
    . 代表当前目录
    … 代表上一级目录
    … 代表上二级目录
    … 以此类推
    注: 相对导入时不能超出包的外部

  • 注意避免循环导入:
    见:
    mypack2/
    init.py
    a.py
    b.py

  • 包的加载路径:

    1. 当前工作路径:
    2. sys.path 提供的路径
      模块的加载路径设置方法:
      sys.path(“新路径”)
  • 练习:

    1. 模拟斗地主发牌,扑克牌54张
      花色:
      黑桃(’\u2660’), 梅花(’\u2663’), 红桃(’\u2665’), 方块(’\u2666’)
      数字:
      A2-10JQK
      大王,小王
      三个人,每个人发17张牌,底牌留三张
      输入回车,打印第1个人的17张牌
      输入回车,打印第2个人的17张牌
      输入回车,打印第3个人的17张牌
      输入回车,打印3张底牌

    2. 修改学生信息管理程序,拆分为模块
      要求:

      1. 主事件循环放在 main.py中
      2. show_menu函数放在menu.py中
      3. 与学生操作相关的函数放在student_info.py中
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值