Python中的if | 您所在的位置:网站首页 › python中的if什么意思 › Python中的if |
Python中的if name “main” 是什么意思?
本文解释了Python代码表达式 if __name__ == '__main__' 的含义。 Python程序使用条件if __name__ == '__main__'仅在Python解释器直接运行程序时运行if语句中的代码。当文件的代码作为模块导入时,if语句中的代码不会被执行。 更多Python相关文章,请阅读:Python 教程 main是什么?在Python中,__name__表示唯一的变量。 Python有许多以双下划线开头和结尾的特殊变量。它们被称为dunder以简化书写(即Double Underscores)。在这种情况下,__name__发音为“dunder name”。 让我们使用Python shell确定__main__的值 – >>> __name__ '__main__'因此,__name__的值是__main__。 让我们尝试导入Python模块,以查看分配给模块的__name__变量的值 – >>> import random >>> random.__name__ 'random'因此,在导入random模块后,我们可以看到__name__的值是“random”,这基本上是它的名称。 Python name变量值创建以下代码并将其放入文件__name__ main.py中 – print(" __name__ value is {}".format(__name__))一个单独的打印命令,使用字符串格式化方法输出__name__的值。 当我们通过引用Python文件直接运行代码时,__name__的值为__main__ – $ python __name__main.py The value of __name__ is __main__相反,如果我们通过Python shell导入模块,__name__的值就是__name__ main – >>> import _name_main __name__ value is __name__main因此,name的值取决于我们的Python代码如何执行。 __name__的示例要在Python中使用条件if __name__==“__main__”,可以创建如下所示的Python程序,通过它调用三个不同的函数 – def step1(): print("执行第一步...") def step2(): print("执行第二步...") def step3(): print("执行第三步...") step1() step2() step3() 输出结果以下是以上代码的输出结果 – 执行第一步... 执行第二步... 执行第三步...现在假设另一个Python应用程序需要使用step1函数()。我们需要导入文件作为模块来实现。 当我们这样做时会发生以下情况 – >>> import _name_main 执行第一步... 执行第二步... 执行第三步... >>> _name_main.step1() 执行第一步...在导入模块之后,可以调用step1()函数。问题在于,导入模块时会自动执行以下三行代码 − step1() step2() step3()那么问题是,如何防止这种情况的发生? 当模块被导入时检查__name__是否等于__main__我们可以验证__name__的值是否等于__main__来避免前一节中所看到的行为。 这样,仅在直接调用该Python文件时才运行if条件中的代码,而不是在导入为模块时运行。 示例现在,程序如下 − def step1(): print("执行第一步...") def step2(): print("执行第二步...") def step3(): print("执行第三步...") if __name__ == "__main__": step1() step2() step3() 输出让我们检查直接调用Python程序是否仍会调用三个函数 执行第一步... 执行第二步... 执行第三步...此外,当我们将其导入为模块时,不会执行这三个函数 7minus; >>> import _name_main >>> _name_main.step1() 执行第一步...这次要好得多! 考虑到_name_main模块具有数百个函数,而并非您要导入的所有函数。 如何简单地导入step1()函数? 应使用以下语法 − >>> from _name_main import step1 >>> step1() 执行step1... >>> step2() Traceback (most recent call last): File "", line 1, in NameError: name 'step2' is not defined如您所见,在此示例中,我们只导入了函数step1的成功版本。 尝试运行step2()时将出现NameError: name’step2′ is not defined。 Python中的主要方法在Java或C等语言中,主要方法的概念非常普遍,并指定程序执行的起始点。 main() 函数在if语句内执行并验证__name__变量的值。 为了获得特定结果,会在 main() 函数中调用多个函数。在我们的情况下,main函数会调用三个子函数 − 示例 现在,程序如下 − def step1(): print("执行第一步...") def step2(): print("执行第二步...") def step3(): print("执行第三步...") def main(): step1() step2() step3() if __name__ == "__main__": main() 输出我们现在调用该程序 − 执行第一步... 执行第二步... 执行第三步...在上述代码中,main()函数是程序的主要逻辑,并且在if语句中被执行。在该例中,我们仍然具有与上面例子中相同的模块名,但我们通过添加main()函数来实现分离”真正”代码和模块导入时执行的代码。 def step1(): print("执行第一步...") def step2(): print("执行第二步...") def step3(): print("执行第三步...") def main(): step1() step2() step3() if __name__ == "__main__": main() 输出 执行第一步... 执行第二步... 执行第三步...由于main的概念也被其他开发人员广泛知晓,将函数命名为main()只是一种标准命名约定,以提高程序的可读性。 实际上,我们可以把main函数改名为其他名字。 在继续本文之前,请验证我们修改后的代码在以下两种情况下都能正常工作: 代码的直接执行 模块的导入 Python中的 name、main和参数我们可以在判定变量__name__是否等于 __main__的if条件语句中直接处理传递给Python程序的任何参数。 我们可以使用 sys模块 来处理传递给程序的参数。 导入sys模块。创建一个名为main()的函数,该函数只接受一个参数。这个参数由一个包含程序运行时提供的参数的字符串列表组成。 在if语句中将sys.argv提供给main()函数。 例子 import sys def main(args): print(args) if __name__ == "__main__": main(sys.argv) 输出以上执行程序的输出如下: ['main.py']如你所见,Python程序的第一个参数是.py文件的名称本身。 让我们修改main方法,使其打印args变量的类型。 def main(args): print(type(args)) print(args)这证明args是一个列表 – $ python arguments.py arg1 arg2 ['arguments.py', 'arg1', 'arg2']除了提供参数,我们还可以解包我们的程序需要的参数,将程序名称排除在外 – 导入 sys 定义 main(c, d): 返回 int(c) * int(d) 如果 __name__ == "__main__": arg1, arg2 = sys.argv[1:3] print(main(arg1, arg2))这是执行程序和接收到的结果的步骤− $ python product.py 4 5 20命令行中给出的两个数字由此代码使用切片运算符获取。 然后,仍然以字符串格式将这两个数字提供给main()方法。 将两个数字转换为整数的结果由main函数返回。 |
CopyRight 2018-2019 实验室设备网 版权所有 |