为什么python运行结果没有出现-为什么我的python函数没有被执行?

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

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

1

2

3

4

5

6def 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

如果你所有的功能都像main(),那么你就没有问题了。

你叫main吗?Python不是Java,运行时调用主对象。

一定要打电话给main。你这样叫它:main()。

所以我必须在main()的开头调用main()?

不。我会写一个答案。

不,您必须在脚本的正文中调用main()。

"什么都不起作用"不是一个问题的精确定义。

对你的题目的简单回答是"是",否则这门语言将一文不值。

你的问题很模糊-请出示你的实际代码。

@ DougR。编辑以包含完整代码!

听起来你需要这样做:

1

2

3

4

5

6

7

8def 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

9def 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

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

1python 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!")

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

1python my_file.py

你会得到:

1

2__name__ is __main__

Hello World!

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

1

2>>> from my_file import *

>>> __name__ is my_file

这很奇怪,为什么python允许使用函数之外的代码?我注意到这件事我们在尝试,但我从来没有理解过。

这允许您以脚本的形式运行python文件(比如从命令行运行python myscript.py)。它还允许在文件作为模块导入时运行设置代码。

main在python中的含义与在其他语言中的含义不同。你可以随意调用你的主程序。你只要打电话就行了。

@加迪,你是说没有功能吗?这仅仅是因为python为您提供了选项。可以将Python用作函数语言、OO语言或简单的过程语言。或者什么都有。你得决定什么对你正在进行的项目最有利。

@scironic所以当使用函数时,它会变得更面向对象,而在没有函数的情况下会变得更少脚本化?

@根据定义,gaddi在函数编程中变得更为基础,尽管考虑到python函数是对象,但它也可以被视为oo。但是的,这将不那么程序化。

@Scironic感谢您的理解!总体来说,这是我的第一个大项目,对编程仍然很陌生。那么,您如何能够判断一个项目是需要OO还是程序性的呢?

@这是一个很难回答的问题。一般来说,项目越复杂,使用OO方法实现就越容易。如果你发现你的项目是"做这个,然后这个,然后这个",你可能会很好地坚持程序风格。如果你开始处理"事情",是时候考虑OOP了。

@加迪,这是个大问题。Rickthey肯定是从它开始的,过程性非常基于线性算法(这样做)。如果你想更深入地了解它,你需要四处看看。这里有一个功能和OOP的比较:stackoverflow.com/questions/2078978/…

"为什么python允许使用函数之外的代码?":因为即使是def和class语句都是可执行语句,并且确实在导入或执行模块时执行。实际上,除了字节代码编译之外,python中的一切都在运行时发生。

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

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

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

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

1

2

3

4

5

6if __name__ == "__main__":

wiki_scrape()

all_csv()

wiki_set = scraped_set("locations.csv")

country_set = all_set("all.csv")

print wiki_set

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

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

使用这个,您将wiki_set和country_set放在全局命名空间中,因此我更喜欢使用额外的主函数。

我会质疑这是最佳实践还是风格偏好。我已经看到了编写良好的代码,它可以双向执行,这取决于作者的意图是用户是否希望从另一个脚本调用main()函数。

@道格,我当然已经用main作为要调用的函数来完成了。但通常只有当我有一个专门用于某个功能的模块时,这个模块才会在其他地方使用。我很少看到有人在一个独立的脚本中使用主函数,但这可能只是我的同事。

@马蒂亚斯,这是一个很好的观点。虽然,假设稍后将使用这些变量,我会将它们的定义放在一个函数中,并使用上面的方法调用它。

@你可能是对的。我知道,当我学会编程python时(甚至在那之前……喘气……perl),我一直被教导,最好把代码放在一个独立的main()函数中,这样它就可以作为一个模块导入,并以我所希望的方式使用,即使我不能想到它的用例。这对我来说是如此根深蒂固,以至于我甚至在敲定vbs或javascript的时候也会这么做。

@道格,不管怎样,我认为你可能是对的,它比最佳实践更时尚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值