为什么我的python函数没有被执行?

Why is my python function not being executed?

本问题已经有最佳答案,请猛点这里访问。

我写了一个非常喜怒无常的带有缩进的脚本,所以我决定做函数。我对python还很陌生,现在我已经创建了这些函数,没有任何效果!

1
2
3
4
5
6
def main ():
    wiki_scrape()
    all_csv()
    wiki_set = scraped_set('locations.csv')
    country_set = all_set('all.csv')
    print wiki_set

我只是想知道这是否是从main()函数调用函数的正确方法?我一直在争论,如果一个缩进问题发生在被调用的函数中,Python似乎非常依赖于适当的缩进,即使它没有出现错误!

完整代码-http://pastebin.com/gjgdhlgr


听起来你需要这样做:

1
2
3
4
5
6
7
8
def main():
    wiki_scrape()
    all_csv()
    wiki_set = scraped_set('locations.csv')
    country_set = all_set('all.csv')
    print wiki_set

main() # this calls your main function

更好的是:

1
2
3
4
5
6
7
8
9
def main():
    wiki_scrape()
    all_csv()
    wiki_set = scraped_set('locations.csv')
    country_set = all_set('all.csv')
    print wiki_set

if __name__ == '__main__':
    main() # this calls your main function

然后从命令行运行它,如下所示:

1
python file_name.py

内置变量__name__是当前上下文命名空间。如果您从命令行运行一个脚本,它将相当于'__main__'。如果从其他地方(包括从解释器内部)以模块的形式运行/导入.py文件,则命名空间(在模块上下文内部)将是.py文件名,如果是包的一部分,则是包名。例如:

1
2
3
4
## my_file.py ##
print('__name__ is {0}'.format(__name__))
if __name__ = '__main__':
    print("Hello World!")

如果从命令行执行此操作:

1
python my_file.py

你会得到:

1
2
__name__ is __main__
Hello World!

但是,如果从解释器导入,您可以看到__name__不是__main__

1
2
>>> from my_file import *
>>> __name__ is my_file


python在启动时不调用任何函数,除非明确要求调用(包括main)。

相反,python命名正在运行的文件,运行的主文件名为__main__

如果您只想调用主函数,可以使用Rick的答案。

但是,在Python最佳实践中,最好执行以下操作:

1
2
3
4
5
6
if __name__ == '__main__':
    wiki_scrape()
    all_csv()
    wiki_set = scraped_set('locations.csv')
    country_set = all_set('all.csv')
    print wiki_set

这样可以确保,如果您将这个python文件作为主文件(您单击的文件或从cmd运行的文件)运行,那么这些函数将运行。

如果将其用作导入的模块,则仍可以使用导入模块的脚本中的函数,但不会自动调用这些函数,因此不会干扰调用脚本。