[python]脚本和模块的区分

本文是关于python脚本与模块的区分:

python脚本和模块

  1. 脚本
  • 全局命名空间:在脚本中,代码执行在全局命名空间下,这意味着定义的函数和变量默认是全局的。
  • __main__模块:当一个 Python 文件作为脚本直接运行时,Python 解释器会自动将它作为一个模块导入,并设置一个特殊的模块名 __main__
  • 运行方式:可以通过 Python 解释器直接运行脚本文件,如 python script.py
  1. 模块
  • 局部命名空间:模块中定义的函数和变量位于它们自己的命名空间内,需要通过模块名进行引用。
  • __init__初始化函数:模块有一个特殊的初始化函数(如果有的话)__init__.py,当模块被导入时执行。
  • 导入方式:模块通过 import 语句被导入,如 import mymodule

一个 .py 文件既可以当作脚本运行,也可以被导入作为模块使用。

  1. 关于if __name__ == "__main__":的使用

假设有一个名为 mymodule.py 的文件:

# mymodule.py

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

#当 mymodule.py 被执行为脚本时,以下代码块会运行:
if __name__ == "__main__":
    greet("World")
  1. 如果将 mymodule.py 当作脚本运行,使用命令 python mymodule.py,那么 greet(“World”) 将被执行。
  2. 如果将 mymodule.py 当作模块导入另一个脚本中,使用命令 import mymodule,然后调用 mymodule.greet("Alice"),将输出 Hello, Alice!。

关于__init__初始化函数

当 Python 解释器导入一个包时,它会查找该目录下的 init.py 文件,并执行其中的代码。这使得该文件成为一个包初始化脚本

假设有一个名为 mypackage 的包

mypackage/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        submodule1.py

mypackage/__init__.py 中,可以通过以下方式导入和组织模块:

# mypackage/__init__.py

from .module1 import some_function as func1
from .module2 import SomeClass as MyClass
from .subpackage import submodule1

#定义可直接从 mypackage 访问的变量
CONSTANT = 'This is a constant from the mypackage package'

可以在其他 Python 脚本中这样使用

import mypackage

print(mypackage.CONSTANT)  # 使用直接从包中访问的变量
mypackage.func1()  # 使用在 __init__.py 中定义的别名
mypackage.MyClass()  # 使用 __init__.py 中指定的类
mypackage.subpackage.submodule1.some_function()  # 使用子模块中的函数
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值