• python学习笔记(11)---(模块与包)


    第九章 模块与包

    1.模块(modules)

    (1)概念:将实现某一特定功能的代码放置在一个文件中,以便于其他程序进行导入使用,可以避免函数名、变量名的冲突,该文件称为模块,拓展名为.py

    (2)作用

    • 模块 = 函数 + 类 + 变量
    • 程序规模不断变大需要分为多个文件,以提高维护性
    • 模块可以重复导入,提高重用性

    (3)分类

    <1> 内置模块:当前使用,python内置模块大约有200多个标准模块。如:

    <2> 自定义模块:第三方的模块

    (4)模块常见的导入方法:五种

    • import 模块名
    • from 模块名 import 功能名
    • from 模块名 import *
    • import 模块名 as 别名
    • from 模块名 import 功能名 as 别名

    (5)使用import导入模块

    • import 模块名
    • import  模块名1,模块名2……  # 导入多个模块
    1. import math
    2. print(math.sqrt(9))

    (6)使用from......import语句导入模块

    • 作用:使用import导入模块时,如果只需要部分函数,可以通过from实现、

    PS:使用时不需要增加模块名前缀

    1. from math import sqrt, floor
    2. print(sqrt(9), floor(10.88)) # 3.0 10

    PS:使用from……import导入的模块,必须保证导入的内容名称是唯一的。若导入模块有相同的变量、函数、类。则会覆盖之前导入的同名内容,因此需要检查,别名应简洁。

    (7)使用as关键字为导入模块定义别名

    • 原因:某些情况下,模块名称过长,建议使用as命名一个较为短的新名称,调用时使用新名称操作
    1. import time as t
    2. print('hello')
    3. t.sleep(3)
    4. print('world')
    5. # hello
    6. # world

    (8)自定义模块

    • 作用:将相关代码写在一个单独的文件中,并命名为“.py”。自行创建的模块名称不能与标准库中的模块名称相同

    例:新建一个模块的文件,实现素数的判断

    当前目录新建prime.py
    输入代码后保存退出

    1. def fun_prime(num):
    2. if num < 2:
    3. print('请输入大于2的整数')
    4. else:
    5. for i in range(2, num):
    6. if num % 2 == 0:
    7. return 0
    8. else:
    9. return 1
    10. # 2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99

    优化:新建一个python文件加载上述模块,实现100以内的素数输出

    1. import prime
    2. for i in range(2, 100):
    3. if prime.fun_prime(i) == 1:
    4. print(i, end=' ')
    • 自定义模块的功能测试

    作用:在编写完自定义模块以后,最好在自定义模块中进行提前测试,以防止抛出异常

    魔方方法:_ _name_ _():每个模块的定义中都包括一个记录模块名称的字符串变量,随着运行的页面不同,返回值不同。

    1. 当前页面执行会输出_ _main_ _,
    2. print(__name__)
    3. def fun_prime(num):
    4. if num < 2:
    5. print('请输入大于2的整数')
    6. else:
    7. for i in range(2, num):
    8. if num % 2 == 0:
    9. return 0
    10. else:
    11. return 1 # __main__
    12. 在其他文件调用执行:输出模块文件名
    13. (随着程序执行的位置不同,_ _name_ _返回的结果也不同)
    14. 结论:模块自行测试的格式如下
    15. if __name__=='__main__': # 如果是当前页面执行
    16. if fun_prime(5):
    17. print('素数')
    18. else:
    19. print('平数')
    20. # 此时不需要其他程序就可以在文件中执行测试

    PS:_ _name_ _一般用于自定义模块测试,还可用于编写程序的入口:

    def  main():  

    # 执行的功能

    # 打印的功能

    # 增删的功能

    if _ _name_ _ == ‘_ _ main_ _’

    main()

    (9)模块搜索目录

    <1> 当使用import语句导入模块时,默认情况会按照以下顺序查找

    • 执行python文件的当前目录
    • python path(环境变量)
    •  python解释器安装目录

    <2> 可以通过sys.path中查找检索目录

    1. import sys
    2. print(sys.path)
    3. # ['D:\\pythontest', 'D:\\pythontest', 'D:\\Python\\python39.zip', 'D:\\Python\\DLLs', 'D:\\Python\\lib', 'D:\\Python', 'C:\\Users\\ASUS\\PycharmProjects\\Test\\venv', 'C:\\Users\\ASUS\\PycharmProjects\\Test\\venv\\lib\\site-packages']

    例:输出大于m且紧随m的k个素数

    1. def fun_prime(num):
    2. if num < 2:
    3. print('请输入大于2的整数')
    4. else:
    5. for i in range(2, num):
    6. if num % i == 0:
    7. return 0
    8. else:
    9. return 1
    10. import sss50
    11. a = int(input('请输入起始值:'))
    12. b = int(input('请输入需要的素数个数:'))
    13. t = 0 # 计数
    14. i = a + 1
    15. while t < b:
    16. if sss50.fun_prime(i) == 1:
    17. t = t + 1
    18. print(i, end=' ')
    19. i = i + 1
    20. 请输入起始值:12
    21. 请输入需要的素数个数:4
    22. 13 17 19 23

    2.包(package)

    (1)概念:将有联系的模块组织在一起,放置在同一个文件夹下,并且该文件内部有一个名为_ _init_ _.py的文件,此文件夹集合称为包

    (2)_ _init_ _.py文件在创建包后会自动新建,默认为空,其作用:

    • 包的标识,不能删除
    • 定义all语句来规定那些模块可以导入
    • 编写python代码(不推荐),应内容简略

    (3)制作包

    方法:左侧侧边栏—>new-->python Package-->输入包名—>回车-->在包中新建模块

    PS:新建包之后,_ _init_ _.py会自动创建

    (4)导入包

    • 格式1:import 包名.模块名  (使用:包.模块名.方法名形式进行使用)
    • 格式2:from 包名 import 模块名(模块.方法名 进行使用)

    PS:格式2的from形式导入包中的某个模块时,必须在_ _init_ _.py中添加all=[‘模块1.py’,’模块2.py’,…’模块n.py’]来控制允许导入的模块列表

    (5)第三方包或模块的pip下载:命令行中输入pip  help查看

  • 相关阅读:
    windows10下SQL Prompt安装和注册
    全链路压测专题---1、全链路压测的思想和方案
    李开复创业公司零一万物开源迄今为止最长上下文大模型:Yi-6B和Yi-34B,支持200K超长上下文
    【业务功能篇96】微服务-springcloud-springboot-认证服务-登录注册功能-Auth2.0-分布式session
    2023年中国工业脱水机行业供需分析:随着自动化和智能化技术的快速发展,销量同比增长4.9%[图]
    AIGC Excel办公应用实现行与列交叉多条件求和
    安全测试前置实践1-白盒&黑盒扫描
    Kubernetes config 配置访问多集群
    【算法】spfa算法(spfa判断负环)
    仓储业如何减低成本
  • 原文地址:https://blog.csdn.net/weixin_62443409/article/details/128102656