python,day3,模块与包

模块大纲

1、模块介绍
		1、什么是模块
		2、为什么要有模块
		3、如何用
		
2、一个py文件的两种用途
		1、被当作程序运行
		2、被当作模块导入
		3、区别
		
3、模块导入方式
		1import
		2from...import...

4、模块的循环导入问题
		1、第一种方案
		2、第二种方案
		
5、搜索模块的路径与优先级

6、编写一个模块的规范

7、包
	1、包是什么?
	2、为何要有包
	3、包的导入

8、软件开发的目录规范


1、模块介绍

'''
1、什么是模块?
    模块是一系列功能的集合体,分为三大类
        1、内置的模块
        2、第三方的模块
        3、自定义的模块

2、为什么要有模块
    1、内置与第三方的模块拿来就用,无须定义,这种拿来主义,可以极大提升自己的开发效率
    2、自定义的模块
        可以将程序的各部分功能提取出来放到一模块中为大家共享使用
        好处是结案少了代码冗余,程序组织结构更加清晰

3、如何用
    1、导入模块
        1、首次导入模块会发生3件事
            1、执行func.py
            2、产生func.py的名称空间,将func.py运行过程中的名字都丢到func.py的命名空间中
            3、再当前文件中产生一个名字func,该名字指向2中产生的命名空间
        2、之后的导入,都是直接引用首次导入产生的func.py名称空间,不会重复执行代码
        3、导入规范:先导入内置模块,然后第三方,最后自定义模块
        4、自定义模块的导入应该采用纯小写+下划线的风格
        5、可以在函数内导入模块
    2、引用
        print(func.x)
        print(func.get)
        强调1:模块名.名字,是指名道姓的问某一个模块要名字对应的值,不会与当前命名空间中的名字发生冲突
        强调2:无论是查看还是修改都是以源模块为基准的,与调用位置无关

'''

2、一个py文件的两种用途

#一个py文件的两种用途
    #1、被当作程序运行
    #2、被当作模块导入
    #3、区别
        #当python文件被运行时,__name__的值为'__main__'
        #当python文件被当作模块导入时,__name__的值为python的文件的值
                if __name__ == '__main__':
                        print('文件被执行')
                else:
                        print('文件被导入')

3、模块导入方式

#import ; from...import.....
        #1、import导入模块在使用时必须加前缀'模块'
                #优点:肯定不会与当前名称空间中的名字冲突
                #缺点:加前缀显得麻烦
        #2、from...import...导入也发生三件事
                #1、产生一个名称空间
                #2、运行func.py将运行过程中产生的名字都丢到模块的名称空间中
                #3、在当前名称空间拿到一个名字,该名字与模块命名空间中的某一个内存地址
                from func import binary_search
                        #优点:代码更精简
                        #缺点:容易与当前命名空间混淆

4、模块的循环导入问题

#循环导入问题(无论那种方案都是垃圾,最好不要用)
        #1、第一种方案
            #m1.py
            print('正在输入m1')
            x = 'a1'
            from m2 import y
            #m2.py
            print('正在输入m2')
            y='m2'
            from m1 import x
        #2、第二种方案(推荐)
            #将导入语句放在函数里
            print('正在导入m1')
            def f1():
                from  m2 import y
                pprint(y)
            x = 'm1'
            ...

5、搜索模块的路径与优先级

#搜索模块的路径与优先级
        #1、无论是import还是from...import在导入模块时都涉及到查找问题
            #优先级:
                #1、内存(内置模块)
                #2、从硬盘找(按照sys.path中存放的文件顺序依次寻找要导入的模块)
                    import sys
                    #值为一个列表,存放了一系列的文件夹
                    #其中第一个文件夹是当前执行文件所在的文件夹
                    print(sys.path)
                #3、了解:sys.modules查看已经加载到内存中的模块
                    import sys
                    print(sys.modules)
            #使用sys.path到模块
                    import sys
                    sys.path.append(r'D:\pycharm\day3\func.py')
                    import func
                    func.binary_search()

6、编写一个模块的规范

#编写一个模块的规范
        'the module is used to...' #模块的文档描述

        import sys #导入模块

        x=1 #定义全局变量

        class foo: #定义类,并写好类的注释
            'class foo is used to...'
            pass

        def test() #定义函数,并写好函数注释
            'function test is used to..'
            pass

        if __name__ == '__main__': #主程序
            test() #在被当作脚本执行时,执行此处代码

7、包

#包
        #1、包就是一个包含有__init__.py文件的文件夹
        #2、为何要有包
            #的本质是模块的一种形式,包是用来当作模块导入
            #作为模块的设计者,模块的功能越来越多时,需要很好管理自己的模块(以文件的方式管理),但还需要暴露给使用者还应该是一个模块
        #3、包的导入:
            #以下导入都是在包内的__init__.py文件内的导入
            #绝对导入:以包的文件夹作为起始导入点
                from w.a.b import xxx
                import w.a.b
                #其中点的左边都必须是包
            #相对导入:仅限于包内使用,不能跨出包(包内模块之间的导入推荐相对导入)
                #.:代表当前文件夹
                #..:代表上一层文件夹
                    from .m1 import f1
                    from ...m1 import f1

8、软件开发的目录规范

#软件开发的目录规范
        #bin  该目录放一些可执行文件
        #conf 项目的配置文件
        #db   存放数据库相关的操作代码
        #lib  存放程序常用的库(模块)
        #core 存放核心代码的逻辑

        #如何获取父级模块
        import os
        import sys
        BASE_DIR = os.path.dirname(os.path.dirname(__file__))
        sys.path.append(BASE_DIR)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值