• python模块-导入模块、制作模块、包、导入包


    了解模块
    导入模块
    制作模块
    all
    包的使用方法

    定义
    模块:是一个python文件,以.py结尾,包含python对象定义和python语句

    导入模块

    导入方法一:

    #导入模块
    import 模块名
    import 模块名1,模块名2
    
    #调用功能
    模块名.功能名()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    import math
    print(math.sqrt(9))  #3.0  除法运算中结果均为浮点数
    
    • 1
    • 2

    导入方法二:

    from 模块名 import 功能1,功能2
    #调用时直接功能名
    
    • 1
    • 2
    from math import sqrt
    print(sqrt(9))    #3.0
    
    • 1
    • 2

    导入方法三:

    from 模块名 import *
    #调用时直接功能名
    
    • 1
    • 2
    from math import *
    print(sqrt(9))    #3.0
    
    • 1
    • 2

    as 定义别名

    #模块定义别名
    import 模块名 as 别名   #定义后只能使用别名不能再使用模块名了
    
    #功能定义别名
    from 模块名 import 功能 as 别名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    import time as tt
    tt.sleep(2)
    print('hello')  #暂停两秒后再打印
    
    
    from time import sleep as sl
    sl(2)
    print('world') #暂停两秒后再打印
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    取别名,原名字不可再用

    制作模块

    在项目需求中,将频繁使用的代码封装成模块。自定义模块名必须要符合标识符命名规则
    定义模块
    命名my_model.py
    在文件里写入以下信息

    def testA(a,b):
    	print(a+b)
    
    #测试信息!!!
    #testA(1,1) #测试一下模块信息--会被调用输出--不合适
    if __name__ == '__main__':
    	testA(1,1)
    #__name__是系统变量,模块的标识符,如果是在自身模块(即当前文件下)值是__main__,在其他文件中,__name__会变成当前模块的名字
    #以此来让运行当前文件时运行测试信息,在运行其他文件调用此文件时,不输出测试信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    #开始写代码,调用my_model
    import my_model
    my_model.test(2,2)
    #在此运行时,__name__值是my_model,即防止testA(1,1)运行
    
    • 1
    • 2
    • 3
    • 4

    模块定位顺序
    导入模块时,搜索位置的顺序:
    1,当前目录
    2,当前目录不在时,会搜索shell变量python下的每个目录
    3,如果找不到,会查看每日路径
    总结:由近到远!!

    注意:自己的文件名不要和已有模块名重复,否则导致原模块无法使用
    使用from 模块名import 功能的时候,如果功能名重复,调用到的是最后定义或者导入的功能

    import random
    num = random.randint(1,5)
    print(num)
    
    • 1
    • 2
    • 3

    使用import 模块名 时,是否担心 功能名字重复的问题? --不需要
    自己命名时切记要注意,不能重复

    import time
    print(time)  #--输出显示的是模块
    
    time = 1
    print(time)  #--输出:1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    __all__列表

    存在__all__列表时,当使用from XXX import *导入时,只能导入这个列表中的元素

    my_model1模块代码:

    __all__ = ['testA']
    def testA():
    	print('testA')
    
    def testB():
    	print('testB')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在调用模块的代码中:

    from my_model1 import *
    testA()  #成功输出
    testB()  #报错
    
    • 1
    • 2
    • 3

    __all__限制只能使用该列表中存在的功能函数

    将有联系的模块组织在一起,放在同一个文件夹下,并在这个文件夹中创建一个名字为__init__.py文件,那么这个文件夹就称为包。
    包–即一个文件夹

    步骤:
    右键new – python Package --输入包名 --ok —新建功能模块(有联系的模块)
    新建包后,包内部会自动创建__init__.py文件
    创建包mypackage
    创建包中的模块 my_model1和my_model2

    my_model1文件下:

    #my_model1代码
    print(1)
    def info_print1():
    	print('my_model1')
    
    • 1
    • 2
    • 3
    • 4

    my_model2文件下:

    #my_model2代码
    print(2)
    def info_print1():
    	print('my_model2')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    导入包

    方法一:

    import 包名.模块名
    包名.模块名.目的
    
    • 1
    • 2
    #导入mypackage包下模块
    import mypackage.my_model1
    mypackage.my_model1.info_print1()
    #1
    #my_model1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方法二:

    必须在__init__.py文件中添加__all__ = [ ] ,控制运行导入的模块

    from 包名 import *
    模块名.目标
    
    • 1
    • 2

    先双击打开文件__init__,在其中输入下面代码:

    __all__ = ['my_model1']
    
    
    
    • 1
    • 2
    • 3

    在导入包的文件中:

    from mypackage import *
    my_model1.info_print1() #正常输出
    #1
    #my_model1
    my_model2.info_print1()  #报错,因为__all__中没有
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Halcon 模板匹配实战代码(一)
    多态原理、虚表指针与虚基表的内存布局。
    1100亩烟台深耕水稻 国稻种芯·中国水稻节:山东盐碱地水稻
    十、【React-Router6】Component 汇总
    ssh秘钥登录
    低代码高拓展性依托何物?一起来探究一番!
    Android kotlin内联函数(inline)的详解与原理
    网络安全与计算机网络基础知识
    洛谷基础题练习5
    【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet
  • 原文地址:https://blog.csdn.net/Sun123234/article/details/127602167