当前位置: 首页 > news >正文

【Python】模块、包

模块

Python模块(Module),是一个Python文件,以.py结尾。模块能定义函数,类和变量,模块里也能保护可执行的代码。

不同模块,同名的功能,如果都被导入,那么后者会覆盖前者

模块导入方式

模块在使用前需要先导入,导入的语法如下:

[from 模块名] import [模块 || 变量 | 函数 | *] [as 别名]

常用的组合形式如:

  • import 模块名

    import timeprint('begin')
    time.sleep(3)   # 使程序睡眠3秒(阻塞)
    print('end')
    
  • from 模块名 import 类、变量、方法等

    from time import sleepprint('begin')
    sleep(3)   # 使程序睡眠3秒(阻塞)
    print('end')
    
  • from 模块名 import *

    from time import *print('begin')
    sleep(3)   # 使程序睡眠3秒(阻塞)
    print('end')
    
  • import 模块名 as 别名

    import time as tprint('begin')
    t.sleep(3)   # 使程序睡眠3秒(阻塞)
    print('end')
    
  • from 模块名 import 功能名 as 别名

    from time import sleep as sprint('begin')
    s(3)   # 使程序睡眠3秒(阻塞)
    print('end')
    

自定义模块

每个Python文件都可以作为一个模块,模块的名字就是文件的名字,也就是说自定义模块名必须符合标识符命名规则。

my_module.py

# 自定义模块
def test(x, y):return x * y

在主程序中导入

# 自定义模块
import my_moduleprint(my_module.test(9, 9))

测试模块

在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,会自行在py文件中添加一些测试信息,例如,在my_module.py文件中添加如下测试代码:

# 自定义模块
def test(x, y):return x * yprint(test(1, 3))	# 测试代码

问题:此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行test函数的调用

解决方法:在模块文件中使用if __name__ == '__main__':

def test(x, y):return x * yif __name__ == '__main__':print(test(1, 3))

__all__

如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素

my_module2.py

__all__ = ['test_1']def test_1():return 'test1'def test_2():return 'test2'

在程序中如下

# 自定义模块
from my_module2 import *print(test_1())		# 若改成print(test_2()),程序会报错

从物理上看,包就是一个文件夹,在该文件夹下包含了一个__init__.py文件,该文件夹可用于包含多个模块文件;从逻辑上看,包的本质依然是模块。

在这里插入图片描述

包的作用:当模块文件越来越多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块

自定义包

在这里插入图片描述

导入方式

方式一

import my_package.my_module1
import my_package.my_module2my_package.my_module1.info_print1()
my_package.my_module2.info_print2()

方式二

from my_package import my_module1
from my_package import my_module2my_module1.info_print1()
my_module2.info_print2()

方式三

from my_package.my_module1 import info_print1
from my_package.my_module2 import info_print2info_print1()
info_print2()

其实和模块导入类似

__init__.py文件中可以添加__all__ = [],来控制允许导入的模块列表,例如:

__all__ = ['my_module1']

必须是使用from 包名 import *来导入才生效

安装第三方包

在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

  • 科学计算中常用的:numpy包
  • 数据分析中常用的:pandas包
  • 大数据计算中常用的:pyspark、apache-flink包
  • 图形可视化常用的:matplotlib、pyecharts
  • 人工智能常用的:tensorflow

安装命令:

pip install 包名称

由于pip是连接的国外网站进行包下载,下载速度可能会慢。可以通过如下命令,让其连接国内的网站进行包安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

查看已安装的所有包

pip list
http://www.lryc.cn/news/140429.html

相关文章:

  • CMAKE_CUDA_ARCHITECTURES针对Jetson Xavier或者Orin的设置
  • sqlite3.OperationalError: unable to open database file解决方法
  • SSL核心概念 SSL类型级别
  • 器件介绍TMP1826NGRR、TMP1826DGKR、TMP1827NGRR、TMP1075NDRLR数字温度传感器
  • 抖店必须绑定抖音账号吗?聊6个抖店不为人知的小细节,别外传
  • 如何搭建智能家居系统并通过内网穿透实现远程控制家中设备
  • 【趣味随笔】手机参数你真的看懂了吗?
  • 微信小程序开发教学系列(4)- 数据绑定与事件处理
  • C++避坑——most vexing parse问题
  • 利用lammps模拟蓝宝石在水润滑环境下的抛光
  • 3.BGP状态机和路由注入方式
  • 微信开发之一键创建微信群聊的技术实现
  • 设计模式二十:观察者模式(Observer Pattern)
  • Linux操作系统--CentOS使用初体验
  • 搭建HAProxy + Keepalived高可用
  • 使用Python爬虫定制化开发自己需要的数据集
  • java八股文面试[java基础]——接口和抽象类的区别
  • head 请求了解过吗?如何用 get 模拟 head 请求?不需要服务器返回数据,怎么实现?
  • Redis笔记——(狂神说)待续
  • 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v7.0版已发布
  • BLFS学习系列 第26章. 显示管理器 —— 总述
  • macOS上编译obs-studio
  • Oracle数据库快速入门
  • Linux内核学习(十)—— 块 I/O 层(基于Linux 2.6内核)
  • SpringMVC 写个 HelloWorld
  • ARM--day7(cortex_M4核LED实验流程、异常源、异常处理模式、异常向量表、异常处理流程、软中断编程、cortex_A7核中断实验)
  • Java中LinkList的基本介绍和细节讨论。双向链表的代码和LinkList的源码。LinkList和ArrayList的比较与选择。
  • Proteus软件安装包分享(附安装教程)
  • “图为科技——什么是边缘计算“
  • SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)