4

我知道为“脚本风格”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

这样的事情可能吗?可取的?惯用语?

4

4 回答 4

4

可以这样做:

if __name__ != "__main__":
    throw TypeError("Attempted to import command-line only script")

# Your code here

但是,我建议不要使用这种模式 - 大多数情况下,很明显脚本只是命令行。如果有人对您在脚本中定义的某些内容有一个用例,他们不应该仅仅为了能够导入一个函数而对其进行编辑。

于 2013-07-12T14:18:44.840 回答
3

不,不可能,真的。

您的模块何时__name__不是由另一段代码作为常规模块导入的。在这种情况下,你不能提前退出。 '__main__'

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

于 2013-07-12T14:18:06.083 回答
2

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

绝对没有理由将其视为“不必要的缩进”……</p>

于 2013-07-12T14:19:20.983 回答
0

您必须诱使进口商本身采取不同的行为。这可能是可能的,虽然很困难,但肯定不是可取的,因为你会引入一些非常意想不到的行为。

如果你真的想避免额外的缩进,我想你可以实现一个“公共”和“私有”模块,公共模块基于该模块分支if __name__ == '__main__'以加载不同的私有模块。但这似乎需要跳很多圈才能避免一些额外的缩进。在任何情况下,如果你main()的缩进足够长以至于让你烦恼,你可能应该首先考虑将更多的缩进分解为函数。

于 2013-07-12T14:21:32.843 回答