不清楚你所说的“列在__main__
". __main__
不是源文件中的实体。相反,它是name模块的名称,如果直接执行的话。当你这样做时if __name__=="__main__"
,当且仅当代码作为主模块执行时(即,如果它是正在运行的程序),您就告诉 Python 执行该块中的代码。中的代码if __name__=="__main__"
如果模块是从另一个模块导入的,则块将不会运行。
请注意,您不会在该 if 块中“列出”函数。相反,你把常规程序代码在您想要运行的那个块中。通常,这段代码只调用一个函数。人们通常称该函数为main()
。但之间并无特殊关系__main__
and main
。您可以将该函数称为任何您喜欢的名称:
def snicklefritz():
# This function will be run when you run the program
print "You ran the program!"
if __name__ == "__main__":
snicklefritz()
尝试运行这个程序(例如,将其另存为“snicklefritz.py”,然后执行python snicklefritz.py
从命令行)。您会看到“您运行了该程序!”打印。如果您创建一个单独的文件import snicklefritz
,该消息将不会被打印。
请注意,没有任何关于“列出函数”的内容。例如,看看这个程序:
print "This will always be printed!"
if __name__ == "__main__":
print "This will only be printed if you run the file as a program!"
这里的if __name__=="__main__"
块不“列出”任何函数。它仅包含文件作为脚本运行时运行的实际代码。不过,人们通常不会这样做,因为将代码放在单独的函数中比仅仅“暴露”在函数之外更整洁。
至于其他函数,您可以在模块中定义您喜欢的任何其他函数,以便在该模块内使用,或者由导入您的模块的其他模块使用。通常,模块中的大多数函数不会在模块内部使用if __name__=="__main__"
块,因为它们不会成为“main”函数的一部分。相反,它们将是供其他代码使用的其他函数。例如:
def otherFunc(x):
# Return x squared
return x**2
def snicklefritz():
# This function will be run when you run the program
print "You ran the program!"
if __name__ == "__main__":
snicklefritz()
otherFunc
模块中根本没有使用。没关系。可能有人想要导入您的模块并使用otherFunc
他们自己。并非每个函数都必须在同一模块中使用,更不用说从if __name__=="__main__"
block.