zoukankan      html  css  js  c++  java
  • 【Python】__name__ 是什么?

    前言

    在我们浏览一下 python 文件或者自己写 python 代码的时候,时常会在代码的最后加上这样的一行代码

    if __name__ == '__main__':
        func_name() 
    

    那么这一行代码有什么具体的作用呢,不加的话会对我们的结果造成影响吗?

    __name__

    首先对于用双下划线开头且结尾的变量,在 Python 中被称为内置变量,除了 __name__,我们常见的还有 __init____dict__ 等等.那么有多少内置变量呢?我们可以通过下面在交互界面输入下面的命令,查看 Python 全部内置变量和内置函数

    >>> dir(__builtins__)
    

    结果如下图:

    不同情况下的 __name__ 的值

    首先我们需要知道 __name__ 在不同情况下会有不同值,它的值取决于我们是如何执行脚本的.我们可以通过几个例子感受一下:

    Example 0

    # test.py
    print(f'__name__ 在 test.py 值为 {__name__}')
    

    然后直接执行一下代码

    $ python test.py
    

    然后看一下输出

    $ python test.py 
    __name__ 在 test.py 值为 __main__
    

    在这个例子中,我们发现 __name__ 的值是 __main__

    Example 1

    在这个例子中,我们重新创建一个脚本 test1.py 然后我们在 test1.py 中调用 test.py

    # test1.py
    import test
    print(f'__name__ 在 test1.py 值为 {__name__}')
    

    接着执行一下 test1.py,再看一下输出

    python test1.py 
    __name__ 在 test.py 值为 test
    __name__ 在 test1.py 值为 __main__
    

    结果是不是很有意思?整个过程是什么样子的呢?简单的画了一个图

    什么时候使用 __name__

    有时候,我们用 Python 写了一个脚本,当我们既希望这个脚本可以单独运行,同样希望它可以在其他的脚本中发挥作用. 这个时候就需要考虑使用 __name__ 了. 这里通过改造上面 Example 1的例子来直观感受一下

    修改一下 test.py 文件

    # test.py
    def hello(name):
        print(f'Hello,{name}')
     
    
    if __name__ == '__main__':
        hello("test")
    

    再修改一下 test1.py 文件

    # test1.py
    from test import hello
    hello("test1")
    

    然后让我们先尝试直接运行一下 test.py,很显然这个时候, if 语句条件满足,会输出 Hello,test

    $ python test.py 
    Hello,test
    

    这个时候我们如果运行 test1.py,程序就会输出 Hello,test1

    $ python test1.py 
    Hello,test1
    

    如果我们把 if __name__ == "__main__"test.py 去掉会发生什么呢?

    $ python test1.py 
    Hello,test
    Hello,test1
    

    参考

    What does if name == “main”: do?

    What’s in a (Python’s) name?

  • 相关阅读:
    MicXP程序爱好者
    cnblogs上的mysql学习心得
    iwebship 购物系统 PHP lamp环境
    可以购买的网址
    模板网址
    学习ecshop 教程网址
    ecshop数据库操作函数
    yzoj1568: 数字组合 题解
    yzoj1891 最优配对问题 题解
    yzoj1985 最长公共单调上升子序列 题解
  • 原文地址:https://www.cnblogs.com/leetao94/p/13259043.html
Copyright © 2011-2022 走看看