NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 教程

    • 安装
    • 流程控制与定义函数
    • 数据结构(类型)
    • 模块
      • 模块
        • 引入模块
        • 脚本方式执行模块
        • 引入搜索机制
        • 标准模块
        • dir() 函数
        • 包
        • 相对导入
    • 输入与输出
    • 错误与异常
    • 类
    • 标准库
    • 虚拟环境和包
    • 开发环境
    • ORM - SQLAlchemy
  • Python
  • 教程
NipGeihou
2024-10-11
目录

模块

# 模块

在项目目录下创建 fibo.py ;在模块内部,通过全局变量 __name__ 可以获取模块名(即字符串)

# 斐波那契数列模块

def fib(n):    # 打印斐波那契数列直到 n
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

def fib2(n):   # 返回斐波那契数列直到 n
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a)
        a, b = b, a+b
    return result

在当前目录,运行 Python 解释器:

>>> import fibo

>>> fibo.fib(1000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'

# 如果经常使用某个函数,可以把它赋值给局部变量:
>>> ffib = fibo.fib
>>> ffib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

# 引入模块

# 从fibo模块引入fib, fib2方法
>>> from fibo import fib, fib2
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

# 从fibo模块引入所有方法;
# 这种方式会导入所有不以下划线(_)开头的名称。大多数情况下,不要用这个功能
>>> from fibo import *
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

# 模块别名
>>> import fibo as fib
>>> fib.fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

# 方法别名
>>> from fibo import fib as fibonacci
>>> fibonacci(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

# 脚本方式执行模块

python fibo.py <arguments>

这种方式执行模块代码时,在模块中读取到的 __name__ 变量为 __main__ ,因此可在模块末尾添加:

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

这样,这个文件既能被用作脚本,又能被用作一个可供导入的模块

python fibo.py 50
0 1 1 2 3 5 8 13 21 34

# 引入搜索机制

当导入一个名为 spam 的模块时

  • 搜索内置模块(内置模块查看 sys.builtin_module_names )
    • 搜索 sys.path 给出的路径列表下,因此需找 spam.py 文件,路径包括:
      • 命令行直接运行的脚本所在的目录
      • PYTHONPATH (目录列表,与 shell 变量 PATH 的语法一样)。
      • 依赖于安装的默认值(按照惯例包括一个 site-packages 目录,由 site 模块处理)

# 标准模块

略

# dir () 函数

内置函数 dir() (opens new window) 用于查找模块定义的名称。返回结果是经过排序的字符串列表:

>>> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> dir(sys) 

# 没有参数时,dir() 列出当前已定义的名称:
>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir()
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']

# 包

包是通过使用 “带点号模块名” 来构造 Python 模块命名空间的一种方式。

例如,模块名 A.B 表示名为 A 的包中名为 B 的子模块。

sound/                          最高层级的包
      __init__.py               初始化 sound 包
      formats/                  用于文件格式转换的子包
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  用于音效的子包
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  用于过滤器的子包
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...
  • 需要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包来处理(除非使用 namespace package (opens new window),这是一个相对高级的特性)。 这可以防止重名的目录如 string 在无意中屏蔽后继出现在模块搜索路径中的有效模块。

  • 在最简单的情况下, __init__.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置 __all__ 变量,这将在稍后详细描述。

# 包中导入单个模块
import sound.effects.echo
# 必须通过其全名来引用
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

# 引入effects包下的echo模块
from sound.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)

# 引入echo模块下的echofilter方法
from sound.effects.echo import echofilter
echofilter(input, output, delay=0.7, atten=4)

# 相对导入

from . import echo
from .. import formats
from ..filters import equalizer
上次更新: 2024/10/11, 11:33:07
数据结构(类型)
输入与输出

← 数据结构(类型) 输入与输出→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式