学习Python的day.14

模块学习

什么是模块:
打开Python解释器,定义了data = 1, 然后去访问data是可以访问到的;关闭Python解释器,再打开,再去访问data,访问不到了。

假设我有1000行的代码,在python解释器中写了,关闭了之后,那意味着我这1000行代码就消失了。

出现了一个脚本的东西,或者认为使用一个文件来记录你写的代码。因为文件是保存在磁盘中,打开或者关闭,文件它依然存在,所以里边的内容也依然存在。

在Python中指的就是一个.py文件, 来记录你写的代码,你把代码放入文件中,他就不会消失了。 

模块的定义: 一个Python文件就是一个模块。
如果你的模块内容过多,你可以把这个模块(.py)分割成若干模块。

重要的点:
(1)什么是模块: 一个python文件(.py)就是一个模块
(2)如果一个模块里边的代码过长,可以将这个模块按照一定的规则划分成若干模块,一般的规则,就是按功能划分
(3)如果在其他模块想要使用另一个的功能(变量,函数,类),可以去导入模块,导入模块的好处就是避免代码的重复

如何去导入模块:

import module_name
# 这种形式:导入这个module_name的全部内容

from module_name import 局部内容(变量, 函数, 类)
# 这种形式:导入的是Module_name的局部内容

from test_module import data, data2
# 导入多个局部内容时使用逗号分隔

你的被导入模块和你需要导入的模块,必须位于同一个级别,同一个级别你可以把他想象成同一级别的目录
重命名:as

from module_name import 局部内容 as newname
# 示例
from test_module import data as d
#就是将导入的局部内容进行改名
from module_name import *: * 代表的是所有的意思

这种方式会导入所有不以下划线(_)开头的名称,注意:大多数情况下,不要用这个功能

模块中的内容:

模块包含可执行语句及函数定义,导入模块的时候:其实就是去执行我们test_module.py中的代码,你在哪里导入就在哪里执行, 所以一般模块导入的位置,就放在.py文件的顶部

如何去调用模块中变量,函数,类:
1、将整个文件引入

import 文件名

文件名.函数名()/文件名.类名

通过这种方法可以运行另外一个文件里的函数

2、只引入某个文件中的一个类/函数/变量

需要从某个文件中引入多个函数或变量是,用逗号隔开即可

from 文件名 import 函数名,类名,变量名

代码示例:

test_module.py文件

data = 1
data2 = 2
print("This is test_module")

# 我在运行test_module.py的时候他也等于
# __name__ == __main__
print("test_module: __name__=", __name__)

if __name__ == '__main__':
    print("only test_module is main")

test.py文件

import test_module

print(test_module.data)
print(test_module.data2)
data3 = "module_learning"
print("This is my module")
print(data3)
from test_module import data as d, data2 as d2

print(d)
print(d2)

运行结果:

调用test_module.py,就是直接把test_module.py运行一遍

__name__:是python解释器内置的一个变量,可以直接去使用,如果当前的模块是主模块(你自己运行的模块:python.exe 模块名.py),就是__name__ == __main__,如果不是主模块的话,就是__name__ == 模块名

例: 在module_learning导入了test_module模块
    (1)在test_module中打印了__name__ 
    (2)在module_learning中也打印了__name__
    (3)然后去运行module_learning,也意味着我们的module_learning为主模块
    (4)在test_module中打印出来__name__ == test_module
    (5)在module_learning中打印了__name__ == __main__

常用的模块:

print()
id()
input()
# 上面的几个方法不需要导入任何模块,可以直接去使用,这些东西存在builtins.py这个文件(模块),
builitins.py:

Built-in functions, exceptions, and other objects.:内建了函数, 异常和一些其他的对象,有些是python内置提前预设的,不需要我们导入。

包:

什么是包?
新建一个包之后:包中包含了一个__init__.py的一个文件,新建一个文件夹:是不包含__init__.py的,Python 只把含 __init__.py 文件的目录当成包

__init__.py的作用:init -> initial:是初始化的意思,最简情况下,__init__.py 只是一个空文件,该文件也可以执行包的初始化代码,或设置 __all__ 变量

包的功能:提高检索模块的效率,让我们的模块层次化分类显示,提高可读性

包的概念:
包是一种用“点式模块名”构造 Python 模块命名空间的方法,针对模块来说的: 管理模块的命名空间 -> 包(package)
命名空间:

在python中,一个命名空间是一个容器,容器内的元素是能映射到对象的名称。多个命名空间相互独立,允许不同命名空间有相同的名称。

有了命名空间之后如何去访问模块呢?
命名空间.模块名
导入:
import 命名空间.module_name
from 命名空间 import Module_name
from 命名空间.module_name import 局部内容

import package(包).module_name
from package(包) import Module_name
from package(包).module_name import 局部内容

# from test_package.package_module1 import data
# from test_package import package_module1
import test_package.package_module1
print(test_package.package_module1.data)

常用的模块:
sys:python解释器相关
os:operation system 和操作系统相关的
random:随机数
time:时间
json:和json数据格式相关的

import sys
# 带v的意思: variable: 变量
print(sys.platform)  #系统所在的平台是win32
print(sys.version)   # python解释器的版本
print(sys.modules)   # 当前有哪些模块

sys.path: 里面存放的是搜索模块的路径:
假设你导入 spam 模块时,解释器首先查找名为 spam 的内置模块;如果没找到,解释器再从 sys.path 变量中的目录列表里查找 spam.py 文件。
sys.path 初始化时包含以下位置:
    输入脚本的目录(或未指定文件时的当前目录)。
    PYTHONPATH (目录列表,与 shell 变量 PATH 的语法一样)。
    The installation-dependent default 
['D:\\lwz_data\\openlab\\20211010Python_code',
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\python39.zip',
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\DLLs', 
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\lib', 
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter', 
'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\lib\\site-packages'
, 'E:\\learningSoftware\\pythonSoftware\\PyCharm
 2018.3.7\\helpers\\pycharm_matplotlib_backend']

print(sys.path)      # python模块的搜索路径: 先后顺序的
print(sys.api_version) #1013
D:\>python sys_test.py 111 222
['sys_test.py', '111', '222']
sys_test.py 111 222

传入了三个参数: 第一个参数其实就是我们.py文件名,第二个参数是111, 第三个参数是222,我们将语句放在linux上去执行的时候,你就可以使用sys来判断你传入的参数

print(sys.argv) # 代表使用python.exe usual_module.py的时候传入的参数
                # 是一个列表
sys.exit(0) # 退出
# 退出码是0: 执行成功
# 退出码是1: 执行的时候遇到了错误
# 退出码是-1: 手动停止程序

random:随机数

import random

随机小数---random():
x in the interval [0, 1): 代表随机的数字在 0 =< x < 1

如果想输出其他随机小数是,要乘以倍数

random.random()*10


随机整数---randint(a, b):
Return random integer in range [a, b]: 返回一个随机整数:[a, b]
choice(seq):
Choose a random element from a non-empty sequence.
# 从不为空的序列中选择一个随机的元素
choices(self, population, weights=None, *, cum_weights=None, k=1)
Return a k sized list of population elements chosen with replacement
# 返回一个k大小的列表
# weights: 权重, 权重大的选中的几率高一些
# cum_weights: 累加权重
取样:def sample(self, population, k, *, counts=None):
Chooses k unique random elements from a population sequence or set
选择k个唯一的随机元素从取样的序列或者集合中
sample(['red', 'blue'], counts=[4, 2], k=5)==sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)
def randrange(self, start, stop=None, step=1):
Choose a random item from range(start, stop[, step])
# 选择一个随机的条目从range()

代码示例:

import random
print(random.random())
print(random.random()*10)
print(random.randint(0, 100))
print(random.choice([4, 5, 6]))
print(random.choices([4, 5, 6, 7, 8], cum_weights=[1, 2, 3, 4, 5], k=2))
print(random.sample([4, 5, 6, 7, 8], k=2))
print(random.randrange(1, 10))
# for i in range(1, 10)

输出结果:

json:一种数据格式

现在在web中比较流行一种传输数据的方式
示例:在编程中,别人给你提供了一个接口:get_students_by_classno(classno),我们可以根据班级编号来获取学生信息,数据格式就可以是我们json格式,和我们字典比较像,分为两种:
第一种:将python对象,转换成json格式的数据
第二种:将json格式的数据,转换成python对象

代码示例:

import json
dict_data = {1: 2, 2: 3}
# json.loads()
data = json.dumps(dict_data)
# 把一个字典转换成一个json格式的字符串
print(data, type(data))
# 把一个json格式的字符串转换成一个python中的字典对象
dict_data2 = json.loads(data)
print(dict_data, type(dict_data))

输出结果:

time:和时间相关的

一个关于时间的模块,可以用于格式化时间

代码示例:

import time

print(time.localtime())
print(time.gmtime())
#1635564740.366917
data = time.time()
print(data)
time.sleep(2)
print(time.time() - data)
# 睡眠: 单位是秒
# time.sleep()
# time.gmtime()
print(time.timezone) # 东八区, UTC + 8

#-28800 =》 28800是一个秒数 =》 小时是8
# 指定一个时间格式然后去输出
#  strftime(format[, tuple]) -> string
#  输入的是一个a time tuple
print(time.strftime("%Y-%m-%d, %H:%M:%S, %j, %W, %w, %Z, %z", time.localtime()))
# time.asctime()
# 默认展示当前时间的格式:Sat Oct 30 11:43:32 2021
print(time.ctime())
# time.mktime()

输出结果:

 OS

主要是和操作系统进行交互,访问目录以及文件的操作

import os

# 输出当前系统的操作系统类型
print(os.name)
# 输出当前目录
print(os.curdir)

# 列出所有的文件和目录, 默认是输出当前工作路径下的所有文件
print(os.listdir())
#查看环境变量
print(os.environ)
#查看当前目录
print(os.getcwd())
#打印系统目录下的内容
print(os.system("dir"))

print(os.mkdir()) #创建目录
print(os.rmdir()) #删除目录

# 最常用的os模块中接口: 类似windows中的资源管理器: 创建文件,查看,删除
# 应用场景:列出某个目录下所有的文件

#查看命令帮助
help(os.listdir)

#输出当前工作目录
print(os.getcwd())

os.chdir("C:\\test")
print(os.getcwd())
print(os.listdir())
print(os.listdir("C:\\test"))

print(os.cpu_count())
# print(os.path)
# current directory: 当前的目录
print("*" * 80)
print(os.path.curdir)
# split: 分割: 分割前边的路径和最后一个文件或目录

print(os.path.split("C:\\test\\test2"))
# 合并两个路径 d: test => d:\test
print(os.path.join("C:\\test", "sys_test.py"))
# 判断你给的这个路径是否是一个目录
print(os.path.isdir("C:\\test\sys_test.py"))
# 判断你给定的路径是否是一个文件
print(os.path.isfile("C:\\test\sys_test.py"))
# absolute path: 绝对路径
print(os.path.abspath("."))
# 给定的路径是否存在
print(os.path.exists("C:\\20211010"))
# 目录名
print(os.path.dirname("C:\\test\sys_test.py"))
# 获取文件大小 4096B 单位一定是字节
print(os.path.getsize("C:\网络拓扑图"))

输出结果:

我这里没有utf-8编码导致一些乱码 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值