Python模块和包

news/2025/1/15 21:39:00/
  • 模块(module)其实就是py文件,里面定义了一些函数、类、变量等
  • 包(package)是多个模块的聚合体形成的文件夹,里面可以有多个py文件,也可以嵌套文件夹
  • 库是参考其他编程语言的说法,是指完成一定功能的代码集合,在python中的形式就是模块和包

定义和调用 Python 模块

我们先来看如何定义一个 Python 模块。

定义一个 hello.py 模块,内容如下:

def sayhello(  ):print("Hello World!")

通常我们使用 import 语句来引入模块,语法如下:

import module1[, module2[,... moduleN]]

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。调用的时候使用 模块名.函数名 来进行调用

以上的示例为例,我们新建 do.py 文件调用 hello.py 模块中方法。

do.py 文件内容如下:

# 导入模块
import hello# 现在可以调用模块里包含的函数了
hello.sayhello()

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

在 do.py 页面执行快捷键 ctrl+b 控制台输出:Hello World!,证明调用 hello.py 中的方法成功。

这就是一个模块的定义和调用的示例,是不是也很简单。

from ... import ...

模块提供了类似名字空间的限制,允许 Python 从模块中导入指定的符号(变量、函数、类等)到当前模块。导入后,这些符号就可以直接使用,而不需要前缀模块名。

语法如下:

from modname import name1[, name2[, ... nameN]]

例如,要导入模块 hello 的 sayhello 函数,使用如下语句:

## 直接导入方法
from hello import sayhello
sayhello()

from … import * 语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

这提供了一个简单的方法来导入一个模块中的所有项目。

我们在 hello.py 中再添加一个 world 方法。

def world():
print("Python World!")

在 do.py 文件中引入全部方法进行调用。

## 导入所有方法
from hello import *
sayhello()
world()

执行后输出:

Hello World!
Python World!

证明 hello 模块中的两个方法都可以直接调用,实际项目中不推荐被过多地使用。

包(package)是 Python 中对模块的更高一级的抽象。简单来说,Python 允许用户把目录当成模块看待。这样一来,目录中的不同模块文件,就变成了「包」里面的子模块。此外,包目录下还可以有子目录,这些子目录也可以是 Python 包。这种分层,对模块识别、管理,都是非常有好处的。

特别地,对于一些大型 Python 工具包,内里可能有成百上千个不同功能的模块。科学计算领域,SciPy, NumPy, Matplotlib 等第三方工具,都是用包的形式发布的。

包定义

常见的包结构如下:

pakageName
-------__init__.py
-------moduleName1.py
-------moduleName2.py
------- ...

包路径下必须存在 __init__.py 文件。

示例:

我们创建一个 cal 的包,包中有一个计算器的 model ,结构如下:

cal
-------__init__.py
-------calculator.py

calculator.py 模块的代码如下:

def add(a,b) :
return a+bdef reduce(a,b) :
return a-bdef multiply(a,b) :
return a*bdef divide(a,b) :
return a/b

使用 Python 包

Python 包的使用和模块的使用类似,下面是导入的语法:

import 包名.包名.模块名

比如我们在 do.py 中导入 calculator.py

# 导入包
import cal.calculator
# 使用包的模块的方法
print(cal.calculator.add(1,2))

但是导入调用的时候报名比较长,这样就可以使用from ... import ...语句来简化一下。

# 导入包
from cal import calculator
# 使用包的模块的方法
print(calculator.multiply(3,6))

当包名越来越长的时候效果也会越好。


http://www.ppmy.cn/news/53716.html

相关文章

VSCode 上的 swift 开发配置

安装Xcode和VsCode 在下列网址下载安装即可 VsCode: https://code.visualstudio.com/ Xcode:https://developer.apple.com/xcode/resources/ 或者apptore 打开xcode要求安装的东西都允许安装一下 启用 Swift 语言支持 确保你已经安装了 Xcode 和 VSCode。这是开始运行的最简…

北京 Meetup 预告 | 内含六个话题,满满干货,期待见面!

在春之末尾,夏之开始的5月,响应社区小伙伴们的呼唤,我们泽拓科技将在北京举办线下社区技术交流活动。 此次我们泽拓科技邀请了去哪儿网、ScaleFlux、美团、SphereEx的相关资深专家来分享他们的数据库探索与实践。我们真诚邀请数据库技术社区…

全国各省份影像下载地址(11级别)

安徽省https://pan.baidu.com/s/1fMuWhVZFvSH1UlCGU1bPpA?pwdeasy澳门特别行政区https://pan.baidu.com/s/1aU2D4o2bfeHTJTb6AkUtVA?pwdeasy北京市https://pan.baidu.com/s/1eaNzAWm1pUx_rjhD_wHHhA?pwdeasy福建省百度网盘 请输入提取码甘肃省https://pan.baidu.com/s/1mAqf…

day36—选择题

文章目录 1.下列关于线程的说法错误的是(B)2.在下列进程的四个特征中,最基本的特征是(B)3.什么是内存抖动(Thrashing)(A )4.假设如下代码中,若t1线程在t2线程…

铁路应答器传输系统介绍

应答器传输系统 应答器传输系统是安全点式信息传输系统,通过应答器实现地面设备向车载设备传输信息。 应答器可根据应用需求向车载设备传输固定的(通过无源应答器)或可变的(通过有源应答器)上行链路数据。 当天线单…

OSCP-Pwned1(pwn题)

目录 扫描 FTP HTTP FTP ssh 提权 扫描 sudo nmap 192.168.218.95 -p- -sS -sCPORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 fe:cd:90:19:74:91:a…

4月份读书学习好文记录

4月份学习记录 找到自己感兴趣的方向,而不是人云亦云,知道自己想要的是什么,而不是一直得过且过! 差距是怎么出现的,四年来的点点滴滴!!! 一个前端大佬的十年回顾 | 漫画前端的前世…

electron+vue3全家桶+vite项目搭建【13】封装加载进度显示,新建窗口 演示主进程与渲染进程通信

文章目录 引入实现效果演示:1.封装新建窗口工具2.测试新建窗口3.封装进度条加载4.测试进度条加载 引入 这里我们通过封装electron的工具类来演示electron中的主进程和渲染进程利用ipc进行通信 demo项目地址 electron官方文档ipc通信 实现效果演示: …