• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

脚本与模块

2020-01-21

1. 脚本

如果你从Python解释器退出并再次进入,之前的定义(函数和变量)都会丢失。因此,如果你想编写一个稍长些的程序,最好使用文本编辑器为解释器准备输入并将该文件作为输入运行。这被称作编写 脚本


脚本(Script)是一种批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等

2. 脚本语言

脚本语言(Scripting language)是为了缩短传统的“编写、编译、链接、运行”(edit-compile-link-run)过程而创建的计算机编程语言。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。

3. 模块

随着程序变得越来越长,你或许会想把它拆分成几个文件,以方便维护。你亦或想在不同的程序中使用一个便捷的函数, 而不必把这个函数复制到每一个程序中去。

为支持这些,Python有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们。这样的文件被称作 模块


模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。

  • 在一个模块内部,模块名(作为一个字符串)可以通过全局变量 __name__ 的值获得

导入

例如,在当前目录下创建一个名为 fibo.py 的文件。再进入Python解释器,用以下命令导入该模块:import fibo

其他形式

  • 把名字从一个被调模块内直接导入到现模块的符号表里:from fibo import fib, fib2
  • 导入模块内定义的所有名称:from fibo import *
    • 这会调入所有非以下划线(_)开头的名称
    • 通常情况下从一个模块或者包内调入 * 的做法是不太被接受的, 因为这通常会导致代码的可读性很差
  • 模块名称之后带有 as,则跟在 as 之后的名称将直接绑定到所导入的模块:import fibo as fib

4. 以脚本的方式执行模块

python fibo.py <arguments>,模块里的代码会被执行,就好像你导入了模块一样,但是 __name__ 被赋值为 "__main__"。这意味着通过在你的模块末尾添加这些代码if __name__ == "__main__":,你既可以把这个文件当作脚本又可当作一个可调入的模块来使用

5. 包

包是一种通过用“带点号的模块名”来构造 Python 模块命名空间的方法。 例如,模块名 A.B 表示 A 包中名为 B 的子模块。正如模块的使用使得不同模块的作者不必担心彼此的全局变量名称一样,使用加点的模块名可以使得 NumPy 或 Pillow 等多模块软件包的作者不必担心彼此的模块名称一样


必须要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包。 在最简单的情况下,__init__.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置 __all__ 变量


1
2
3
4
5
6
7
8
sound/                          Top-level package
__init__.py Initialize the sound package
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...

导入:from sound.effects import echo


从包中导入*

  • 如果一个包的 __init__.py 代码定义了一个名为 __all__ 的列表,它会被视为在遇到 from package import * 时应该导入的模块名列表

    1
    __all__ = ["echo", "surround", "reverse"]
  • 使用 from package import specific_submodule :除非导入的模块需要使用来自不同包的同名子模块,否则这是推荐的表示法

6. 子包

  • 绝对导入:from sound.effects import echo
  • 相对导入:from module import name
    • from . import echo
    • 相对导入是基于当前模块的名称进行导入的。由于主模块的名称总是 "__main__" ,因此用作Python应用程序主模块的模块必须始终使用绝对导入
  • Program Language
  • Python
  • Basic
Python属性与特性
pep8编码风格笔记
  1. 1. 1. 脚本
  2. 2. 2. 脚本语言
  3. 3. 3. 模块
  4. 4. 4. 以脚本的方式执行模块
  5. 5. 5. 包
    1. 5.1. 6. 子包
© 2024 何决云 载入天数...