四时宝库

程序员的知识宝库

Python 中 __name__ 属性,你知道怎么用吗

__name__ 是 Python 中的一个内置属性,用于标识模块或脚本的名称。它是每个模块或脚本都拥有的一个特殊属性。

__name__ 的值

  • 当模块被 直接运行 时,__name__ 的值为 '__main__'
  • 当模块被 导入 到另一个模块时,__name__ 的值为模块的 名称(不包括 .py 扩展名)。

用法

__name__ 属性通常用于在模块被直接运行时执行特定的代码块。这可以通过以下方式实现:

def main():
    # 要执行的代码

if __name__ == '__main__':
    main()

在上面的代码中,如果 mymodule.py 被直接运行,则 main() 函数会被调用。这是因为 __name__ 的值为 '__main__'。但是,如果 mymodule.py 被导入到另一个模块中,则 main() 函数不会被调用。这是因为 __name__ 的值为模块的名称('mymodule'),而不是 '__main__'

常见用法

以下是一些 __name__ 属性的常见用法:

  • 执行模块级代码: 使用 if __name__ == '__main__': 语句块来执行仅在模块被直接运行时才应执行的代码。这通常用于包含模块级初始化代码或测试代码。
  • 测试模块:if __name__ == '__main__': 语句块中编写测试代码,以测试模块的功能。这有助于确保模块按预期工作。
  • 创建可重用的代码: 编写可以在其他模块中导入和使用的代码,并在 if __name__ == '__main__': 语句块中包含模块特定的代码。这可以帮助您组织代码并提高代码的可重用性。

示例

以下是一个更详细的示例,演示如何使用 __name__ 属性:

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

if __name__ == '__main__':
    # 模块级代码
    names = ['Alice', 'Bob', 'Charlie']

    for name in names:
        greet(name)

    # 测试代码
    greet('John')
    greet('Jane')

在这个示例中:

  • 模块级代码仅在模块被直接运行时执行。它遍历一个名称列表并调用 greet() 函数为每个名称打印问候语。
  • 测试代码也在 if __name__ == '__main__': 语句块中,但它位于模块级代码之后。它调用 greet() 函数两次,以测试其功能。

当该模块被直接运行时,它将打印以下输出:

Hello, Alice!
Hello, Bob!
Hello, Charlie!
Hello, John!
Hello, Jane!

但是,如果该模块被导入到另一个模块中,则只有模块级代码会被执行。测试代码将不会被执行,因为 __name__ 的值不是 '__main__'

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接