在Python程序中,你会经常看到name,例如:ifnamemain:main() 本文将介绍如何正确使用和理解这个变量。 请注意,name在程序中是一个变量,只不过这个变量的命名有点奇怪,用双下划线开头和结尾。这种命名的方法,在Pyhton的类对象设计中,常常用于一些具有特殊作用的属性或者方法名称〔2〕。 如果将编写的一个Python文件,即。py为扩展名的文件,作为模块被其他程序引入的时候,我们需要通过name这个变量,决定在引入的时候是否要运行该文件。 例如创建一个文件namescript。py,内容如下:defmyfunction():print(thevalueofnameisname)defmain():myfunction()ifnamemain:main() 如果执行namescript。py文件,其执行流程如下: 在程序中的代码被执行之前,Python解析器先给name变量赋值为main。然后逐行执行程序中的代码。注意,当执行到第7行的时候,判断name的值是否为main,如果条件为真,就执行main()这个前面自定义的函数,并最终打印出结果。 如果将namescript。py文件作为一个模块,在另外一个文件中引入,例如在名为importingscript。py的文件中,有代码:importnamescriptasnsns。myfunction() 这样,就在importingscript。py文件中使用了namescript。py文件中定义的函数myfunction。如此,避免了重复代码,而且提升了开发效率。这是Python语言的重要特点。 如果执行importscript。py文件,其流程如下图所示: 在importscript。py中,变量name被赋值为main,然后执行importnamescript,Python解析器会自动在模块名字后面增加。py并在检索目录中查找该文件所以,在引入模块的时候不要写成importnamescript。py。找到了,就引入该文件中的所有代码。 然后,将namescript。py文件所运行的空间中的name设置为namescript。结合上图,在importingscript。py和namescript。py中,分别有两个同名的name变量,但是,它们的值不同。如此,在namescript。py中,因为name的值是namescript了,于是该文件中的ifnamemain条件不再成立,所以此条件下的main()函数不再执行。 在importingscript。py中,调用了namescript。myfunction(),打印的结果是:thevalueofnameisnamescript,这里的name当然是namescript。py中的变量。 如果在importingscript。py中,增加print(name),打印出来的结果应该是main。