#! /usr/bin/python
def main():
print("boo")
当我尝试在Python 3.3中运行它时,此代码不执行任何操作。没有错误或任何事情。 什么是错的
[tim@tim-arch ~]$ gvim script
[tim@tim-arch ~]$ sudo chmod 775 script
[tim@tim-arch ~]$ ./script
[tim@tim-arch ~]$
答案 0 :(得分:28)
您仍然必须调用该功能。
def main(): # declaring a function just declares it - the code doesn't run
print("boo")
main() # here we call the function
答案 1 :(得分:14)
我假设你想要做的是从命令行执行脚本时调用print函数。
在python中,您可以通过检查__name__
变量__main__
来确定包含一段代码的脚本是否与最初启动的脚本相同。
#! /usr/bin/python
if __name__ == '__main__':
print("boo")
只需这些代码:
def main():
print("boo")
你正在定义一个函数而不是实际调用它。要调用函数main()
,您需要像这样调用它:
main()
答案 2 :(得分:4)
您需要调用该函数,将脚本更新为
#! /usr/bin/python
def main():
print("boo")
#call it
main()
答案 3 :(得分:3)
在python中,如果你想编写一个脚本来执行顺序的一系列小任务,那么绝对没有需要编写一个函数来包含它们。把它们放在一条线上;或者使用像;
这样的表达分隔符(不是真的推荐,但是你可以做到就是这样的愿望),同样:
task1
task2
task3
task4
或
task1; task2; task3; (again **not** really recommended, and certainly not pythonic)
在您的情况下,您的代码可以转为:
print('boo')
print('boo2')
print('boo3')
并且在没有main()
方法的情况下它仍将按预期运行,因为它们会按顺序进行评估。
请注意,您可能希望为这一系列任务创建函数的原因是:
现在,如果你觉得有必要在其他编程语言中编写类似于main()
方法的代码,那么请使用下面的python习惯用法(如其他用户所述):
if __name__ == '__main__':
doSomething()
以上工作原理如下:
import
一个python模块时,它会获得一个string
(通常是导入它的名称)作为其__name__
属性。__name__
属性设置为__main__
import
随意使用该脚本作为可插拔模块,或直接执行它以获得一系列表达式在if __name__ == '__main__':
下直接评估。如果您觉得需要深入了解更多信息,我的消息来源如下:
答案 4 :(得分:1)
如果你发现其他答案令人困惑或恐惧,那么这就是一个有希望帮助的寓言。查看以下Python程序:
a = 34
当它运行时,它会在退出脚本之前执行某些事情:,Python会知道存在变量a
并且它的值是整数34.它没有&#t; t 任何有关此信息的内容,但它是一个完整的程序,可以某些东西。为了产生一些实际价值,它需要与其环境互动,虽然。它对这个值有什么作用?它可以创建34个目录,或ping数据中心的第34个服务器,或检查数据库中最新34个用户的密码强度,或者其他任何内容;或者只打印一些东西。
a = 34
print(a)
以下程序在某种意义上与第一个程序非常相似。
def b():
a = 34
print(a)
当你运行这个程序时,它会做的东西: Python现在知道有一个名为b
的函数,并且它没有接受任何参数,并且它包含一些语法上有效的Python代码,这些代码将在其他代码调用时运行,但它实际上 实际上没有使用此代码。为了观察函数中代码产生的任何值,你必须实际调用它:
b()
(另外,也可以注意到函数声明a
中的局部变量b
与具有相同名称的全局变量不同。)