专业编程基础技术教程

网站首页 > 基础教程 正文

一文详解Python模块和包

ccvgpt 2024-11-22 11:25:48 基础教程 1 ℃

什么是模块?

一个函数用来封装一个功能,但是,一个软件的设计不可能都只写在一个文件里面,将一些常用功能放到一个文件中,就是模块。模块的本质就是一个.py文件。

为什么要使用模块?

  • 将程序分成一个个的功能文件,更加方便管理以及重复使用
  • 提升开发效率,避免重复造轮子

模块的分类

  • 内置模块:比如之前学习过的time、random模块
  • 第三方模块:比如pygame模块,需要自己使用pip安装 pip install pygame
  • 自定义模块,比如起个名字叫做ayst.py

导入模块(import 模块名)

每个模块都是一个独立的命名空间,定义在这个模块中的函数,把这个模块的命名空间当做全局命名空间,两个不同模块中的同名变量不会发生冲突

一文详解Python模块和包

模块第一次被导入后就将模块加载到内存中,重复导入模块会直接引用内存中已经加载好的结果

模块导入方式

  • import 模块名
  • import 模块名 as 新名称
  • from …… import ……

模块文件中的测试代码

一个模块中的功能也是需要进行测试的,但是,模块被导入时,就会自动执行模块中的print语句

  • 脚本:直接作为文件执行 __name__ 等于 __main__
  • 模块:被导入执行 __name__ 等于 模块名
class People:

    def __init__(self, name, gender, age):

        self.name = name
        self.gender = gender
        self.age = age

a = 1
b = "hello"


print("哈哈哈,我导入就被执行了")

# 内置全局变量 __name__
print(__name__)

if __name__ == "__main__":

    print("只有以脚本形式运行我才会执行")

内置模块:sys模块

与解释器交互的接口

  • sys.argv 传递命令行参数
  • sys.version 获取python解释器版本信息
  • sys.platform 返回操作系统平台名称
  • sys.modules Python解释器启动时加载到内存中的模块
  • sys.path 返回模块的搜索路径
import sys

print(sys.version)
print(sys.platform)
print(sys.path)
print(sys.modules)

print(sys.argv)

print(sum([int(i) for i in sys.argv[1:]]))

执行代码:python3 demo.py 1 2

模块的搜索路径

  • 内存中已经加载的模块 sys.modules
  • 内置模块
  • 依次查找sys.path列表中的模块

注:模块名不可以与系统内置模块重名

我们自定义的模块如果全部放在site-packages文件夹下面,时间久了会非常混乱,因此可以创建一个文件夹专门存储模块

import sys

sys.path.append('D:\cat')

import hello

print(hello.info)

包:什么是包?

  • 包就是一个包含__init__.py的文件夹,创建包的目的就是为了将文件组织起来
  • Python3中,包下面没有__init__.py,导入包不会报错,而Python2中会报错
  • 创建包就是为了导入,而不是直接运行

导入规则

  • 凡是导入时带点的,点的左边一定是包的名字
  • import cat
  • import cat.examples.test
  • import cat.examples.test as t
  • from cat.db import register
  • from cat.api import *

注:__all__ = ["manage", "versions"]可以限定导入的模块

文件中代码:

cat/__init__.py:

from . import api
print("我是包下面的init文件")

api:

api/__init__.py:

from . import run

print("我是api下面的init文件")

__all__ = ["manage", "versions"]
api/manage.py:

def f1():

    print("I am api.manage")
api/run.py:

def f1():

    print("I am api.run")
api/versions.py:

def f1():

    print("I am api.versions")

db:

db/__init__.py:

print("我是db下面的init文件")
db/register.py:

def f1():
    print("I am db")

相关推荐

Tags:

最近发表
标签列表