能否请您说明if __name__ == '__main__':
是什么意思,并且main()函数是强制性的吗?
以及为什么会给我一个错误:o未定义(我知道函数内的变量是局部变量,但我在主函数中传递了o?
import easygui as eg
school = ['girl1' , 'boy2' , 'teacher']
def meet(list):
o = eg.choicebox("hello Roy", choices = school)
return o
def say_hello(str):
print('Hello, How are you', + o)
return
def main():
meet(list)
print("Meet is working")
say_hello(o)
if __name__== "__main__":
main()
答案 0 :(得分:1)
首先-main函数对于python脚本并不重要,这是某种C传统。
在python中,入口点是脚本的第一行(与C中的main()不同)。但是导入脚本会完全执行它,因此有一个技巧可以避免在导入期间执行:
if __name__ == '__main__':
# enter your direct run only logic here
__ name__是一个内置变量,其结果为当前模块的名称。如果文件是使用python解释器直接运行的,则其值为'__main__'。因此,这种情况意味着:仅在直接运行文件时才执行条件逻辑(在导入过程中不能解释)
因此将您的逻辑放在某些函数中是显而易见的,当然,大多数人都将其命名为“ main()”。
所以我的python样板很像:
import sys
# Global variables
def main():
# logic here
if __name__ == '__main__':
sys.exit(main)
sys.exit允许重定向整数,由于程序执行成功,main可以返回到系统。 (您的return 1或return 0将像在C中一样工作)
关于错误:您在'meet'函数中声明了'o',因此无法从其他函数中看到它。对于say_hello或main没有定义。
答案 1 :(得分:0)
您不需要main
函数。您可以轻松地编写代码(下面将讨论其他更正内容)
school = ['girl1' , 'boy2' , 'teacher']
def meet(lst):
o = eg.choicebox("hello Roy", choices=lst)
return o
def say_hello(o):
print('Hello, How are you', + o)
if __name__ == '__main__':
name = meet(school)
print("Meet is working")
say_hello(name)
函数main
仅提供该代码块的单个入口点。
您的问题是您将参数名称与参数值混淆。调用list
时,o
和main
都不在范围内;您需要提供将绑定到参数 lst
和o
的实际值。此外,似乎应该将school
传递给meet
(并在对choicebox
的调用中使用),并将meet
的返回值用作{ {1}}。
say_hello
语句的目的是在仅导入模块而不是将其作为脚本运行的情况下阻止代码运行。
答案 2 :(得分:0)
main函数很有用(但不是强制性的),因为每次编译器读取模块时(每个示例在导入时),模块的内容都会执行。
if __name__== "__main__":
main()
此代码可让您确保仅在通过命令行或从另一个调用此模块的main()的模块调用时,模块的这一部分才运行。
关于o的错误是o是met(list)中的变量,在此函数之外未知。