大家好,大家主意没,在 Python 中,并没有像 Java 或 C++ 中那样的强制使用 main
函数。
Python 的执行是从脚本的第一行开始,按顺序执行。然而,在编写具有多个函数和可能被其他脚本引用的模块时,定义一个主执行函数变得非常有用。这就是 if __name__ == '__main__':
发挥作用的地方。
__name__
是什么?
在 Python 脚本中,__name__
是一个内置变量。当文件被直接运行时,__name__
的值会被设为 '__main__'
。如果文件是被导入到其他文件中的,__name__
的值会被设置为文件的名字。利用这一特性,我们可以控制哪些代码块在被导入时执行,哪些代码块在文件作为主程序运行时执行。
使用场景
使用 if __name__ == '__main__':
的好处包括:
-
• 模块化和重用代码:通过这种方式,您可以在其他程序中重用模块,而不必担心代码会自动执行。
-
• 测试:这允许你在同一个文件中写测试代码,测试代码只会在该文件作为主程序运行时执行。
假设我们有一个简单的模块,math_operations.py
,它包含几个基本的数学操作函数。此外,我们将在该文件中添加一些测试代码,以验证这些函数是否正确工作。
创建模块 math_operations.py
# math_operations.py
def add(x, y):
return x + y
def multiply(x, y):
return x * y
def main():
# 这是主函数,用于运行程序
print("Addition of 5 and 3 is:", add(5, 3))
print("Multiplication of 5 and 3 is:", multiply(5, 3))
# 测试代码
if __name__ == '__main__':
# 测试 add 函数
assert add(2, 3) == 5, "Add function test failed"
# 测试 multiply 函数
assert multiply(2, 3) == 6, "Multiply function test failed"
# 如果测试成功,输出以下语句
print("All tests passed!")
# 运行主函数
main()
创建模块 use_math_operations.py
# use_math_operations.py
from math_operations import add, multiply
def main():
# 使用导入的函数
result_add = add(10, 5)
result_multiply = multiply(10, 5)
print("Result of add(10, 5):", result_add)
print("Result of multiply(10, 5):", result_multiply)
if __name__ == '__main__':
main()
运行结果
当直接运行 math_operations.py
:
-
• 输出所有测试通过的确认。
-
• 执行
main
函数,输出两个数学操作的结果。
当从另一个 Python 脚本use_math_operations.py
导入 math_operations.py
:
在 use_math_operations.py
文件中,我们通过 from math_operations import add, multiply
导入了 math_operations.py
中定义的函数。这个导入操作不会触发 math_operations.py
中的 if __name__ == '__main__':
块,因此该模块中定义的测试和 main()
函数不会执行。
然后我们在 use_math_operations.py
的 main()
函数中使用了 add
和 multiply
函数,并输出了结果,这将验证这些函数能够正常工作,而原模块的测试代码和主函数没有被执行。
通过这种方式,我们不仅保证了代码的可重用性和模块化,同时也确保了能在不干扰其他脚本的情况下测试模块功能。
掌握 Python 中的 main
方法的使用不仅可以帮助你更好地组织代码,还能使其更加模块化和可重用。掌握__main__
的使用,可以使你的Python代码更加结构化和模块化。无论是在进行个人项目还是协作开发中,这种模式都非常有用。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!