Python 没有带if“uuuu name”的额外缩进__主要内容:

Python 没有带if“uuuu name”的额外缩进__主要内容:,python,main,idioms,Python,Main,Idioms,我知道为“脚本风格”python程序定义main()方法是一种很好的风格,这样以后就可以选择将其作为模块包含 让我们假设这段代码(随机片段): 变成 def main(): a = 5 if a > 0: print a if __name__ == "__main__": main() 使我的所有代码缩进一级。 我尽量避免代码中不必要的缩进/嵌套,以获得最大的清晰度,因此我想知道是否可以在这里做一些事情,例如 if __name__ != "_

我知道为“脚本风格”python程序定义main()方法是一种很好的风格,这样以后就可以选择将其作为模块包含

让我们假设这段代码(随机片段):

变成

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

这样的事情可能吗?明智的习惯用语?

不,不可能,真的

\uuuu name\uuuuu
'\uuuu main\uuuuu'
时,您的模块作为常规模块由另一段代码导入。在那种情况下,你不能过早地退出

一次额外的缩进级别有什么问题?只需点击编辑器中的tab,就可以完成它了吗?就我个人而言,我发现使用
main()
函数记录意图比不插入代码要好得多。

您可以这样做:


然而,我建议不要使用这种模式——大多数情况下,脚本只是命令行脚本应该是非常明显的。如果有人有您在脚本中定义的某个用例,他们不必编辑它就可以导入一个函数。

函数应该做一件事,这也适用于
main
。它应该做(一些)
main
的事情,其他的事情都应该在函数和类中完成


绝对没有理由将此视为“不必要的缩进”…

您必须诱导进口商自己做出不同的行为。这可能是可能的,虽然很难,但肯定不可取,因为您将引入一些非常意外的行为


如果您真的想避免额外的缩进,我想,您可以实现一个“public”和“private”模块,其中公共模块基于
If\uuuu name\uuu=='\uu main\uuu'
进行分支,以加载不同的私有模块。但是,为了避免出现一些额外的凹痕,这似乎需要做很多工作。在任何情况下,如果您的
main()
足够长,缩进让您感到困扰,您可能首先应该考虑将更多缩进函数。

一次性额外缩进级别有什么问题?
他说:这是关于清晰性的。保持低压痕水平通常是高质量的特性code@hek2mgl:我发现
main()
函数的意图更加清晰。
main
函数(与所有其他函数一样)应该很小。我不明白为什么某些行的缩进级别会破坏清晰度。当然,如果您在
main()
中编写数百行代码,可能会有点难看,但这适用于所有函数–如前所述。@hek2mgl:在Python中,缩进比在其他语言中更重要。我同意你的观点,但这并不是删除缩进级别可以增加清晰度的地方。@MartijnPieters我知道python代码中缩进的语法含义。python强制执行应该应用于所有编写良好的源代码的规则,这很好。我不是指这种缩进。我想我只是在错误的时间把我的评论放在了错误问题的错误答案下面…:)不过,感谢您的回复。“我尽量避免不必要的缩进以获得最大的清晰度”-为了获得最大的清晰度,您可以将一个相当大的脚本拆分为多个函数。此外,如果文件应该作为独立脚本运行,则根本不需要使用
if\uuuuu name\uuuu==“\uuuuu main\uuuu”
检查。在这些情况下使用它主要是为了澄清脚本的流程,并防止在应该导入到某个地方时出现意外的副作用。只要你知道自己在做什么,你就可以自由地不使用它(例如,在不考虑副作用的情况下不导入)。创造性的回答!但是,由于它要求在导入时捕获异常,因此它确实简化了总体情况,而且肯定是出乎意料的事情。好的代码永远不会让人惊讶。
SyntaxError: 'return' outside function
if __name__ != "__main__":
    throw TypeError("Attempted to import command-line only script")

# Your code here