第 10 章 模块与包

1. 模块

1.1. 概述

  • 在 Python 中,一个.py文件就是一个模块(Module)。
  • 模块中可以包含:变量、函数、类、等很多内容。
  • 通常把能够实现某一特定功能的代码,集中放在一个模块中(模块就类似于一个工具箱)。
  • 模块可以提高代码的可维护性 与 可复用性,还可以避免命名冲突。

1.2. 模块的分类

Python 中的模块分为三类,分别是:标准库模块、自定义模块、第三方模块。

1.3. 创建模块

模块命名注意点:

  1. 要符合标识符命名规则
  2. 模块名(.py文件名)区分大小写
  3. 不要与标准库模块同名(一旦同名,Python会优先引入标准库模块)

创建如下文件:

├── order.py   # 订单模块
└── pay.py     # 支付模块

order模块中包含:创建订单、关闭订单,相关的功能函。

# 订单最大金额
max_order_amount = 1000000

# 创建订单
def create_order():
    print('订单创建成功!')

# 关闭订单
def cancel_order():
    print('订单关闭成功!')

# 提示函数
def show_info():
    print('我是来自【订单】模块的提示!')

pay模块中包含:微信支付、支付宝支付,等相关功能。

# 支付超时时间
timeout = 1800

# 微信支付
def wechat_pay():
    print('我是微信支付!')

# 支付宝支付
def ali_pay():
    print('我是支付宝支付!')

# 提示函数
def show_info():
    print('我是来自【支付】模块的提示!')

1.4. 导入模块

1️⃣import 模块名

如下写法,会导入order模块,和pay模块的全部内容,又叫全部导入,是最简单的导入方式。

import order
import pay

print(order.max_order_amount)
order.create_order()
order.cancel_order()
order.show_info()

print('*' * 10)

print(pay.timeout)
pay.wechat_pay()
pay.ali_pay()
pay.show_info()

注意:

  1. Python 中导入模块的时,会执行对应模块中的代码。
  2. 模块只加载一次,后续再次导入,直接复用缓存。

 2️⃣import 模块名 as 别名

import order as dd
import pay as zf

print(dd.max_order_amount)
dd.create_order()
dd.cancel_order()
dd.show_info()

print('*' * 10)

print(zf.timeout)
zf.wechat_pay()
zf.ali_pay()
zf.show_info()

 3️⃣from 模块名 import 具体内容1, 具体内容2, ……

from order import max_order_amount, show_info
from pay import wechat_pay, ali_pay

print(max_order_amount)
show_info()
wechat_pay()
ali_pay()

 4️⃣from 模块名 import 具体内容 as 别名

from order import max_order_amount as max_amt, show_info as show1
from pay import timeout as tm, show_info as show2

print(max_amt)
print(tm)
show1()
show2()

 5️⃣from 模块名 import *

from order import *
from pay import *

max_order_amount = 10

print(max_order_amount)
create_order()
cancel_order()
show_info()

print(timeout)
wechat_pay()
ali_pay()
show_info()

1.5. __all__ 与 __name__

关于__all__:

  • 在 Python 模块中,可通过 __all__ 来控制from 模块 import *能导入哪些内容。
  • __all__ 的值可以是:列表、元组。

关于__name__:

  • __name__是每个 Python 模块(.py文件)都拥有的一个内置变量。
  • 它的具体值取决于模块的运行方式:

(1). 作为主程序直接运行,__name__ 的值是 __main__

(2). 作为模块被导入到其他程序中运行,__name__的模块的文件名(不带.py)。

1.6. 标准库模块

  1. Python 中的模块分为三类,分别是:标准库模块、自定义模块、第三方模块。
  2. 标准库模块:随着 Python 一起安装在我们电脑上的那些模块。
  3. 有一些标准库模块是用C语言实现的,这些用C语言实现的模块,又称:【内置模块】。

标准库模块保存在Python安装目录中的Lib文件夹中,但内置模块无法在Lib中看到。

import copy     # 拷贝对象(浅拷贝、深拷贝)
import os       # 操作系统相关操作(文件、文件夹、路径系统层面的操作)
import random   # 随机数相关(生成随机数、随机选择、洗牌)

# 上面的copy、os、random是标准库模块中的【非内置模块】,可以通过__file__查看文件位置
# print(copy.__file__)
# print(os.__file__)
# print(random.__file__)

# 如下的这些模块,属于内置模块(无法看到具体实现,也没有__file__属性)
import time     # 时间相关操作(获取时间、延时、格式化时间等。)
import math     # 数学相关(开平方、取绝对值 等等)
import sys      # Python 解释器相关操作

# 创建一个文件夹
os.mkdir('demo')

# 随机选择一个人
names = ['张三', '李四', '王五', '李华']
print(random.choice(names))

# 洗牌
names = ['张三', '李四', '王五', '李华']
random.shuffle(names)
print(names)

# 休眠
time.sleep(2)
print('ok')

# 获取当前时间
print(time.strftime('%H:%M:%S'))
print(time.strftime('%p %I:%M:%S'))

# 开平方
print(math.sqrt(4))

# 取绝对值
print(math.fabs(-11.2))

# 获取Python解释器的版本
print(sys.version)
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容