文章目录
- 模块
- 模块导入的方式
- 直接导入
- 部分导入
- 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()