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

时间:2015-04-15 13:57:34

标签: python function

我写了一个非常具有缩进性的脚本,所以我决定制作函数。我对python很陌生,现在我已经创建了这些函数,没有任何作用!

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

2 个答案:

答案 0 :(得分:7)

听起来你需要这样做:

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

更好:

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

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

python file_name.py

内置变量__name__是当前的上下文命名空间。如果从命令行运行脚本,它将等同于'__main__'。如果从其他地方(包括从解释器内部)运行/导入.py文件作为模块,则命名空间(在模块的上下文中)将是.py文件名,或者包名称(如果它是其中的一部分)一套。例如:

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

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

python my_file.py

你会得到:

__name__ is __main__
Hello World!

但是,如果您从口译员导入,则可以看到__name__不是__main__

>>> from my_file import *
>>> __name__ is my_file

答案 1 :(得分:4)

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

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

如果您只想拨打主要功能,可以使用Rick的答案。

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

if __name__ == '__main__':
    wiki_scrape()
    all_csv()
    wiki_set = scraped_set('locations.csv')
    country_set = all_set('all.csv')
    print wiki_set

这确保了如果您将此python文件作为主文件(您单击的文件或从cmd运行)运行,则将运行这些函数。

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