python组织结构

python组织结构

Python的组织结构主要包括模块(Modules)、包(Packages)和库(Libraries)。让我们逐一来了解它们的概念和用法。

1. 模块(Modules)

一个模块就是一个包含Python代码的文件。这个文件可以包含变量、函数、类等,它的目的是为了组织代码并使其可重用。你可以使用import语句来引入一个模块,并使用其中的变量、函数或类。

# 例子:创建一个名为mymodule.py的模块
# mymodule.py

def greet(name):
    print(f"Hello, {name}!")

# 在另一个文件中引入模块并使用其中的函数
# main.py

import mymodule

mymodule.greet("Alice")

2. 包(Packages)

包是一种用于组织模块的方式,它是一个包含了多个模块的目录。在包的目录中通常会包含一个特殊的__init__.py文件,该文件可以为空,也可以包含包的初始化代码。通过使用点号(.)来表示包的层级结构,你可以引入包中的模块。

# 例子:创建一个名为mypackage的包
# mypackage/__init__.py

# mypackage/module1.py

def func1():
    print("Function 1")

# mypackage/module2.py

def func2():
    print("Function 2")

# 在另一个文件中引入包和其中的模块
# main.py

from mypackage import module1, module2

module1.func1()
module2.func2()

_init_.py的用法

  • 用来标识该文件夹是一个包。
  • 导入包或包下的模块时,__init__.py文件被自动执行。
  • __init__.py文件中也可以利用__all__来指定导入的模块。

例如,在__init__.py定义如下内容:

 __all__ = ['module1']  # __all__是一个包含了需要在包被导入时自动导入的模块名的列表

在main.py中导入模块module2.py。

 from package1 import *
 
 print(module2.num1)  
 # 输出
 NameError: name 'module2' is not defined

由于在__init__.py文件中指定导入的模块没有module2module2.py不能被导入。

3. 库(Libraries)

库是一组相关的模块和包的集合,它们通常用于解决特定的问题或提供特定领域的功能。Python标准库是一个强大的例子,它包含了许多常用的模块和包,如mathosdatetime等。

# 例子:使用Python标准库中的模块
import math

result = math.sqrt(25)
print(result)

总体来说,Python的组织结构通过模块、包和库的层次化方式,帮助开发者更好地组织和管理代码。这使得代码更具可读性、可维护性,并且有利于代码的复用。

模块导入

import

import只能引入模块,不能直接引入变量或函数。

示例:在main.py文件中导入包package1中的模块module1.py和module2.py。

 import package1.module1
 import package1.module2 as pm2   # 多层调用太长,可以重命名

from…import

可以导入模块、变量或函数等。

  • 导入模块
 from package1 import module1
 from package1 import module2
  • 导入变量或函数
 from package1.module1 import var3
  • 导入模块下所有内容
 from package1.module2 import *   # 一般不建议使用*
  • 控制模块中对外暴露的内容

module2.py模块中定义了__all__=['num1', 'num2'],则导入模块module2.py时只可导入num1, num2,其他内容不可见。

 from package1.module2 import *
 
 print(num3)
 # 输出
 NameError: name 'num3' is not defined

注意,__all__属性仅在使用import *时才有效。

 from package1.module2 import num3
 
 print(num3)
 # 输出
 3
  • 导入模块换行
 # 使用 \
 from package1.module2 import num1, \
     num2, num3
 # 使用(),推荐这种方式
 from package1.module2 import (num1,
     num2, num3)

包和模块导入注意点

  • 包和模块不会重复导入:在导入一个模块的时候,就会执行这个模块里的所有内容,但是多次导入只执行一次。
  • 不建议循环引入:多个模块文件间不建议相互调用,会导致报错。

相对导入和绝对导入

  • 绝对导入:必须从顶级包开始。
  • 相对导入:.表示当前目录,..上一级目录。
  • import不能使用相对导入,如import .package2.package4.m2。
  • 入口文件不可以使用相对路径来导入模块,只能使用绝对路径。
  • python -m main.py 将入口文件当作一个模块执行,则可以使用相对路径导入模块。

模块搜索路径

当我们导入模块时,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中。sys.path返回一个列表

 import sys
 
 print(sys.path)

当我们需要添加自定义的搜索目录时,使用如下命令:

 import sys
 
 sys.path.append('自定义模块的路径')

模块推荐导入顺序

在文件中需要导入内置模块、第三方模块或自定义模块时,建议的导入顺序是:标准库模块–第三方模块–自定义模块

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值