鱼C论坛

 找回密码
 立即注册
查看: 1796|回复: 6

[已解决]if __name__ == "__main__"怎么用?

[复制链接]
发表于 2023-7-26 20:41:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我经常在一些程序中看见这条语句,他有什么用途?怎么使用他?
if __name__ == "__main__"
最佳答案
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__" 可以使你的模块具备更好的可复用性,同时也可以方便地进行测试和调试。

希望这个解答对你有帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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__" 结构,你可以更好地组织你的代码,并确保特定的代码只在特定的情况下执行。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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__" 可以使你的模块具备更好的可复用性,同时也可以方便地进行测试和调试。

希望这个解答对你有帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 20:51:30 | 显示全部楼层
if __name__ == "__main__"  是 Python 中的一个常见语句,它的作用是控制某些代码块只在该模块被直接运行时执行,而在模块被导入时不执行。

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

因此, if __name__ == "__main__"  这个语句就是用来检查这个模块是被直接运行还是被导入的。如果是被直接运行的,那么这个条件就为真, if  下面的代码块将会被执行。如果是被导入的,那么这个条件就为假,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 21:03:25 | 显示全部楼层
当作为程序运行时(而不是被导入)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 21:08:34 From FishC Mobile | 显示全部楼层
if __name__ == "__main__"下的代码只有在直接运行(idle中为按F5)的情况下执行,当这个py文件作为一个模块(使用import xxx)导入时不执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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荣誉 +5 贡献 +3 收起 理由
liuhongrun2022 + 5 + 3 人工好评

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 07:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表