我知道为“脚本式”python程序定义一个main()方法是一种很好的方式,所以稍后可以选择将它作为一个模块包含在内。
所以让我们假设这段代码(随机片段):
a = 5
if a > 0:
print a
变为
def main():
a = 5
if a > 0:
print a
if __name__ == "__main__":
main()
导致我的所有代码缩进一个级别。 我尽量避免在我的代码中使用不必要的缩进/嵌套以获得最大的清晰度,因此我想知道是否可以在这里完成某些事情,例如。
if __name__ != "__main__":
return # just leave this file
a = 5
if a > 0:
print a
但(当然)这会触发:
SyntaxError: 'return' outside function
是这样的吗?可取?惯用的?
答案 0 :(得分:4)
你可以这样做:
if __name__ != "__main__":
throw TypeError("Attempted to import command-line only script")
# Your code here
但是,我建议不要使用这种模式 - 大多数情况下,脚本只是命令行应该非常明显。如果有人为您在脚本中定义的内容设置了一个用例,那么他们就不必编辑它就可以导入一个函数。
答案 1 :(得分:3)
不,不可能,真的。
当__name__
不 '__main__'
时,您的模块是由另一段代码导入的,作为常规模块。在这种情况下,你不能早日摆脱困境。
一次额外缩进级别有什么问题?只需在编辑器中点击标签,然后完成它?就我个人而言,我发现使用main()
函数记录的意图远比保留代码缩进更好。
答案 2 :(得分:2)
一个函数应该做一件事,这也适用于main
。它应该做(某些)main
个东西,其他一切都应该在函数和类中完成。
绝对没有理由将此视为“不必要的缩进”......
答案 3 :(得分:0)
你必须诱导导入器本身表现不同。这可能是困难的,但肯定是不可取的,因为你会引入一些非常意外的行为。
如果你真的想避免额外的缩进,我想,你可以实现一个“公共”和“私有”模块,其中公共模块基于if __name__ == '__main__'
分支以加载不同的私有模块。但这似乎有很多箍,以避免一些额外的缩进。在任何情况下,如果你的main()
足够长,以至于缩进对你不利,你应该考虑首先将更多的内容放入函数中。