8、python中的模块和包

模块

模块就是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
模块是非常简单的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()

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值