我知道为"脚本风格"的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
这样的事情可能发生吗?明智的惯用的
您可以执行以下操作:
if __name__ != "__main__":
throw TypeError("Attempted to import command-line only script")
# Your code here
然而,我建议不要使用这种模式——大多数时候,很明显,脚本只是命令行。如果有人有你在脚本中定义的东西的用例,他们不应该为了导入一个函数而编辑它。
不,不可能,真的。
当__name__
是而不是'__main__'
时,您的模块由另一段代码作为常规模块导入。在这种情况下,你不能提前保释。
一次额外的缩进级别有什么问题?只需点击编辑器中的选项卡,就可以完成了吗?就我个人而言,我发现使用main()
函数记录意图比不影响代码要好得多。
函数应该做一件事,这也适用于main
。它应该做(一些)main
的事情,其他的一切都应该在函数和类中完成。
绝对没有理由将其视为"不必要的缩进"…
您必须诱导导入程序本身采取不同的行为。这可能是可能的,虽然很困难,但肯定不可取,因为你会引入一些非常意想不到的行为。
如果你真的想避免额外的缩进,我想你可以实现一个"public"one_answers"private"模块,其中public模块基于if __name__ == '__main__'
分支以加载不同的private模块。但为了避免一些额外的凹痕,这似乎有很多困难需要克服。在任何情况下,如果main()
足够长,以至于缩进会困扰您,那么您可能应该首先考虑将更多的缩进分解为函数。