8、python中的模块和包

news2024/11/27 8:29:34

文章目录

  • 模块
    • 模块导入的方式
      • 直接导入
      • 部分导入
      • import module 和from module import *的区别
    • 模块的其他信息
      • _ _ name _ _ 的特殊使用
    • 模块的分类
    • 从包中导入模块的方式

模块

模块就是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块。

python模块实质上是一个python文件,当导入模块,会优先从当前目录中找该模块对应的python文件。因此,需要注意自定义的python文件的文件名不要和已有的模块冲突
比如,不要自己创建文件requests.py,这和request模块对应文件名冲突

模块导入的方式

创建文件 hello.py

digits='0123456789'

def login():
    print('login...')

导入模块,实质就是加载并执行模块的内容

直接导入

创建文件 模块.py
导入hello模块,能调用hello模块中的变量和函数

import hello
print(hello.digits) #可以调用hello模块中的变量和函数
print(hello.login())

在这里插入图片描述这只是导入模块的一种方法。
还有一种方法就是可以只导入模块的一部分信息:

部分导入

from hello import  login  #导入模块的一部分信息
login()

from hello import login as f  #也可以给导入的一部分信息起别名
f()

在这里插入图片描述

import module 和from module import *的区别

  • import module,引用模块中的变量时要用module.变量名;
  • from module import *,引用模块中变量时只需直接使用变量名
  • import module,使用模块中的变量时,使用的是原模块中的变量,不会创建新的变量;
  • from module import *,使用模块中的变量时,会把原模块中的变量复制到本地,会创建新的对象。开发中建议用import module。

原文链接:https://blog.csdn.net/weixin_44857400/article/details/108083690

模块的其他信息

编辑hello.py

"""
hello模块的说明文档
"""
digits='0123456789'

def login():
    print('login...')
import sys
print(sys.path)  #打印导入该模块,依次从哪几个路径寻找
import hello
print(dir(hello)) #查看hello模块可以使用的信息,比如变量和函数...

print(hello._ _doc_ _) #查看hello模块的说明文档
print(hello._ _file_ _) #查看hello模块的绝对路径
print(hello._ _name_ _) #当hello模块被导入时,显示模块的名称
print(hello._ _dir_ _) #当hello模块被导入时,显示模块的所有可以使用的方法

在这里插入图片描述

编辑 hello.py

"""
hello模块的说明文档
"""
digits = '0123456789'

def login():
    print('login...')
   
#当用户使用From module import *导入模块全部内容时,__all__指定导入的内容 
_ _all_ _=['digits'] 

在其他文件中只能导入_ _ all _ _指定的内容

from hello import *
print(digits) #只能导入digits变量
# print(login())

_ _ name _ _ 的特殊使用

_ _ name _ _ 在不同的场景下,值不同
在模块内部执行时,值为_ _ main _ _
当模块被导入执行时,值为模块名

在 hello.py 内部

"""
hello模块的说明文档
"""
digits = '0123456789'

def login():
    print('login...')

# 当模块内部运行,需要执行的代码。当模块被导入时,不执行
if _ _name_ _ == '__main__':
    print(_ _name_ _)  # 当在模块内部执行_ _name_ _,其值为_ _main_ _
    # 当该模块被导入,_ _name_ _的值为模块的名字,即hello

适用于一个场景:一些测试代码适合在单独执行文件时执行,而在被其他文件引用时不执行。
就可以借助变量_ _ name _ 。当该文件是单独执行时,变量 _ name _ 的值为 _ main _ 。当该文件(模块)被其他文件导入,那么变量 _ name _ _值为模块名。从而写一个if判断即可。

模块的分类

  • 内置模块(只要装了python解释器,就有的模块):time、datetime、random、string
  • 第三方模块(需要自己安装的模块):requests、pandas、colorama(颜色模块)、faker
  • 自定义模块(自己编写的python文件(模块)或包)
import  time
print(time.time()) #打印时间戳
print(time.ctime()) #字符串的时间 Thu Dec  1 17:04:03 2022
tuple_time=time.localtime() #命名元组的时间
print(tuple_time)
print(tuple_time.tm_year) #2022

from datetime import date,datetime,timedelta
print(date.today()) #获取今天的日期 2022-12-01
print(datetime.now()) #获取当前时间 2022-12-01 17:02:13.958248
print(date.today() + timedelta(days=3)) #获取3天后的日期
print(date.today() - timedelta(days=3)) #获取3天前的日期
print(datetime.now() + timedelta(minutes=10)) #获取10分钟之后的时间
print(datetime.now() - timedelta(minutes=10)) #获取10分钟之前的时间

在这里插入图片描述

import random
print(random.random()) # 随机生成0-1之间的小数
print(random.randint(1,10)) # 随机生成1-10之间的整数
print(random.choice(['a','b','c','d','e'])) #随机选择一个元素
print(random.choices(['a','b','c','d','e'],weights=[1,1,5,2,10])) #随机选择一个元素,并对元素设置权重
print(random.sample(['a','b','c','d','e'],3)) #随机选择n元素,这个n等于3

在这里插入图片描述

import string
print(string.digits) #获取所有的数字
print(string.ascii_letters) #获取所有的字母
print(string.ascii_lowercase) #获取所有的小写字母
print(string.ascii_uppercase) #获取所有的大写字母

在这里插入图片描述
colorama 是颜色模块,能设置字体颜色

import colorama 
#from colorama import Fore
print(colorama.Fore.RED + 'Error: 主机不存在')
print(colorama.Fore.GREEN + 'Success: 主机创建成功')

在这里插入图片描述
faker 是生成测试信息的模块

from faker import  Faker
fake = Faker('zh-cn') # 随机生成中文的信息
print(fake.name())  #随机生成名字, 马建
print(fake.address()) # 随机生成地址
print(fake.email()) #随机生成邮箱

包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。
python中的模块实质就是一个文件,那么包是将有联系的模块组织到一起,那么包就相当于是个文件夹。

一个普通的python应用程序目录结构:

在这里插入图片描述

其中_ _ init _ _.py是初始化文件。

在pycharm中新建一个 python package会发现默认有一个文件_ _ init _ _.py,而新建一个directory则什么也没有。这也是package和directory的唯一区别。

创建一个python package 名为 sdk,然后在包内创建模块 ali.py、huawei.py
编辑文件_ _ init _ _.py

print("正在导入包sdk")

编辑模块ali.py,创建函数

def create_ecs():
    print('创建阿里云ecs')

def create_ecs():
    print('删除阿里云ecs')

编辑模块huawei.py,创建函数

def create_ecs():
    print('创建华为云ecs')

def create_ecs():
    print('删除华为云ecs')

新建python文件,导入建立的sdk包,

import sdk

执行该文件,显示:
在这里插入图片描述说明,导入包的实质就是执行包里面的_ _ init _ _.py内容

从包中导入模块的方式

方法一:
指明从包中导入的模块

from sdk import ali
from sdk import huawei

ali.create_ecs()
huawei.create_ecs()

在这里插入图片描述
方法二:
在文件_ _ init _ _.py中指定导入模块
编辑文件 _ _ init _ _.py

#print("正在导入包sdk")
from . import ali
from . import huawei

新建python文件,导入包

import sdk
sdk.ali.create_ecs()
sdk.huawei.create_ecs()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pandas交叉表与透视表pd.crosstab()和pd.pivot_table()函数详解

一、交叉表 交叉表:用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表),pd.crosstab(value1, value2)pandas.crosstab(index, columns, valuesNone, rownamesNone, colnamesNone, aggfuncNone, marginsFalse, margins_nameAll,…

【虚幻引擎】UE4/UE5 动画蓝图,混合空间,目标偏移,动画蒙太奇之间的联系

一、UE动画介绍 虚幻引擎在为角色设置移动行走时,为了更好的调节和控制人物的相关动画,设置了一系列的跟人物相关的动画,其中包括一维混合空间,二维混合空间,动画蒙太奇,目标偏移等,动画蓝图的出…

Day16--加入购物车-动态设置tabBar的数组徽标

问题1: ①:刚开始 ②:点击购物车的图标后,跳转到cart页面发现,并没有徽标在tabbar上: 提纲挈领: 我的操作: 1》把 Store 中的 total 映射到 cart.vue 中使用: 2》在页面…

Java ArrayLIst与顺序表

什么是集合类? Java当中的集合类,其实就是封装号的数据结构 原始的数据结构——>Java当中封装成的集合对应的那个原始的数据结构——>用Java封装的集合对应的。 集合类所在的包:java.util这个包底下 顺序表的底层是一个数组&#xff0…

Flutter状态管理

前言 状态管理是什么?简单的来说,就是当某个状态发生变化的时候,告知该状态的监听者,让状态所监听的属性随之而改变,达到UI层随着数据层变化而变化的效果。在Flutter中的状态(State)是一个组件的UI数据模型&#xff0…

【MySQL 读写分离】Sharding JDBC + Spring boot 实现数据库读写分离的登录 Demo

上篇文章我们搭建了 MySQL 数据库主从复制集群 MySQL 搭建主从复制集群~~~ 本篇文章我们利用搭建好的主从复制集群,使用 SpringBoot 结合 Sharding-JDBC 搭建一个小的 登录 Demo,测试实现数据库的读写分离 项目源码地址: https://gitee.com/l…

13 【操作mysql数据库】

13 【操作mysql数据库】 1.mysql 介绍 付费的商用数据库: Oracle,典型的高富帅;SQL Server,微软自家产品,Windows定制专款;DB2,IBM的产品,听起来挺高端;Sybase&#x…

android WebRtc 视频通话(P2P)

概述 WebRTC名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。Google于2011年6月3日开源的即时通讯项目&#x…

centos7中mysql5.7.32服务离线升级到5.7.39教程

目录 一、导入新的离线安装包 二、备份原有mysql数据库 1、停止tomcat服务 2、查看mysql服务 3、备份数据库 三、停止mysql服务并打包备份旧版本 1、停止mysql 2、打包旧的mysql文件夹 3、删除旧的mysql文件夹 4、删除/etc/init.d/下跟mysql有关的全部文件&#xff0…

MongoDB数据迁移之迁移工具Kettle

MongoDB数据迁移之迁移工具Kettle ETL:简介 ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所…

Java+JSP+MySQL基于SSM的医院挂号就诊系统-计算机毕业设计

项目介绍 随着计算机科技的快速发展,很多地方都实现了自动化管理,医院也不例外。在大多数医院,无论是挂号处,还是取药的窗口,都会看到有很长的队伍,很显然这样会让患者就医的过程中浪费太多的时间。其次&a…

【读论文】GANMcC

GANMcC简单介绍网络结构生成器辨别器损失函数生成器损失函数辨别器tips总结参考论文:https://ieeexplore.ieee.org/document/9274337 如有侵权请联系博主 这几天又读了一篇关于GAN实现红外融合的论文,不出意外,还是FusionGAN作者团队的人写…

Python语音合成小工具(PyQt5 + pyttsx3)

TTS简介 TTS(Text To Speech)是一种语音合成技术,可以让机器将输入文本以语音的方式播放出来,实现机器说话的效果。 TTS分成语音处理及语音合成,先由机器识别输入的文字,再根据语音库进行语音合成。现在有…

JavaScript -- 三种循环语句的介绍及示例代码

文章目录循环语句1 While循环2 do-while循环3 for循环4 嵌套循环循环语句 通过循环语句可以使指定的代码反复执行 JS中一共有三种循环语句 while语句do-while语句for语句 通常编写一个循环,要有三个要件 初始化表达式(初始化变量)条件表…

风云气象卫星系列介绍

风云气象卫星系列是中国于1977年开始研制的气象卫星系列,目前发射了风云一号、风云二号、风云三号、风云四号等卫星。 风云一号 FY-1卫星分为两个批次,各两颗星。01批的FY-1A星于1988年7月9日发射,FY-1B星于1990年9月3日发射。02批卫星在01批…

Word处理控件Aspose.Words功能演示:在 Java 中将 Word 文档转换为 EPUB

大多数智能设备,如智能手机、平板电脑、笔记本电脑等,都支持EPUB格式来查看或阅读文档。它是电子书或电子出版物的常用格式。另一方面,MS Word 格式,如DOCX、DOC等,是数字世界中广泛使用的文档格式之一。在本文中&…

Web3中文|NFT无法保障数字所有权?

来源 | nftnow 编译 | DaliiNFTnews.com 2021年,有这样一个头条新闻:一家投资公司以大约400万美元的价格在The Sandbox上买下了2000英亩的虚拟地产。 通过在以太坊区块链上购买792个NFT,该公司得到了元宇宙平台上的1200个城市街区。 但是…

家用宽带如何叠加多条宽带,提高局域网速度

前言 关于多条宽带如何合并,使局域网内带宽更快?通常我们在企业网络或实际项目中,随着用户的增加,一条或者几条带宽不能满足正常使用,便可以对带宽进行叠加,便于网络带度更快; 一、为什么要用…

web基础阶段的小兔鲜儿项目学习

小兔鲜儿1. 所用素材2. 项目文件介绍3. index页面的基本骨架4. 思路:先写外面大盒子和版心,由外往内写5. 源码:1. 所用素材 素材链接,点我跳转:https://download.csdn.net/download/angrynouse/87228151 2. 项目文件…

全国产!全志T3+Logos FPGA核心板(4核ARM Cortex-A7)规格书

核心板简介 创龙科技SOM-TLT3F是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核全国产工业核心板,ARM Cortex-A7处理单元主频高达1.2GHz。核心板CPU、FPGA、ROM、RAM、电源、晶振、连接器等所有器件均采用国产工业级方案,国产…