奋斗中的鱼 发表于 2023-7-26 20:41:14

if __name__ == "__main__"怎么用?

我经常在一些程序中看见这条语句,他有什么用途?怎么使用他?
if __name__ == "__main__"

Mike_python小 发表于 2023-7-26 20:41:33

if __name__ == "__main__" 的作用:

在 Python 中,if __name__ == "__main__" 是一种常见的代码结构。它主要用于确定当前模块是直接运行还是作为导入模块使用。

当 Python 解释器执行一个脚本时,它会设置一个特殊的全局变量 __name__,如果该脚本是直接被执行的,__name__ 的值将被设置为 "__main__";如果脚本是作为模块被导入执行的,__name__ 的值将是模块的名称。

使用方法:

你可以使用 if __name__ == "__main__" 的代码结构来编写一些在直接运行脚本时才执行的代码,而在作为模块导入时不执行这部分代码。

例如,考虑以下的示例代码:


# 模块中的一些函数或类

def my_function():
    print("Hello, World!")

class MyClass:
    def __init__(self):
      print("This is an instance of MyClass")

# 在直接运行脚本时才执行的部分

if __name__ == "__main__":
    my_function()
    obj = MyClass()


在这个例子中,当直接运行这个脚本时(例如通过命令行 python script.py),if __name__ == "__main__" 条件成立,my_function() 函数和 MyClass 类的实例化将被执行。

然而,如果将该脚本作为模块导入到另一个脚本中(例如 import script),那么 if __name__ == "__main__" 条件将不成立,因此 my_function() 和 MyClass 将不会被执行。这可以防止在导入模块时执行一些不必要或不希望执行的代码。

通过使用 if __name__ == "__main__" 结构,你可以更好地组织你的代码,并确保特定的代码只在特定的情况下执行。

希望这个解释能够解决你的疑问。如果有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-7-26 20:41:37

"if __name__ == "__main__"" 是一个常见的条件语句,用于判断程序是否作为主程序直接运行。

在Python中,每个模块(.py文件)都有一个特殊的变量__name__。当模块被直接运行时,__name__ 的值会被设置为 "__main__";而当模块被导入到其他模块中时,__name__ 的值就是该模块的文件名。

因此,通过使用 if __name__ == "__main__" 这个条件语句,在这个条件下的代码块只会在当前模块作为主程序运行时执行,而在被导入时不会执行。

这个特性的主要用途是将一个模块既可以作为独立的程序运行,又可以被其他模块导入并调用其中的函数或变量。当模块作为主程序运行时,我们可以在 if __name__ == "__main__" 的代码块中编写测试代码、执行某些初始化操作,或者调用模块中的某个特定函数。而当模块被导入时,if __name__ == "__main__" 下方的代码块将不会执行,避免重复运行或产生不必要的副作用。

以下是一个示例:

# 模块中的一些函数和变量定义

def foo():
    # 函数实现

def bar():
    # 函数实现
   
# 其他代码

if __name__ == "__main__":
    # 如果模块作为主程序运行,执行下面的代码
    # 进行测试或执行某些初始化操作
    print("这个模块正在以主程序方式运行")
    # 调用函数等


当你直接运行这个模块时,if __name__ == "__main__" 下方的代码块将会被执行。而如果你将这个模块导入到其他模块中,则下方的代码块将不会被执行。

使用 if __name__ == "__main__" 可以使你的模块具备更好的可复用性,同时也可以方便地进行测试和调试。

希望这个解答对你有帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-7-26 20:51:30

if __name__ == "__main__"是 Python 中的一个常见语句,它的作用是控制某些代码块只在该模块被直接运行时执行,而在模块被导入时不执行。

在 Python 中,每个文件都可以被视为一个模块,模块的名字就是文件的名字。Python 会为每个模块定义一个内置变量__name__ ,用于表示该模块的名字。如果一个模块被直接运行,那么__name__的值会被 Python 解释器设置为"__main__" ,如果模块是被导入的,那么__name__的值就是模块的名字。

因此, if __name__ == "__main__"这个语句就是用来检查这个模块是被直接运行还是被导入的。如果是被直接运行的,那么这个条件就为真, if下面的代码块将会被执行。如果是被导入的,那么这个条件就为假,

liuhongrun2022 发表于 2023-7-26 21:03:25

当作为程序运行时(而不是被导入)

smallwh 发表于 2023-7-26 21:08:34

if __name__ == "__main__"下的代码只有在直接运行(idle中为按F5)的情况下执行,当这个py文件作为一个模块(使用import xxx)导入时不执行

hellomyprogram 发表于 2023-7-26 21:12:36

本帖最后由 hellomyprogram 于 2023-7-26 21:15 编辑

if __name__ == "__main__":表示以下代码只有在这个文件被运行时才能被执行,而不是通过外部导入而运行的。
例如:
#main.py
import foo

if __name__ == "__main__":
    print("Main called.")
#foo.py
if __name__ == "__main__":
    print("Foo called.")
此时运行main.py,会输出:
Main called.


#main.py
import foo

if __name__ == "__main__":
    print("Main called.")
#foo.py
print("Foo called.", "__name__ ==", __name__)
此时运行main.py,会输出:
Main called.
Foo called. __name__ == foo

原因是,当你导入(import)模块的时候,解释器会先运行一遍模块里面的内容,让这个模块初始化并定义其中的方法和类,此时的__name__就是模块的名字。
页: [1]
查看完整版本: if __name__ == "__main__"怎么用?