2011-10-13 53 views
6

我想知道是否有办法编写下面的模块代码,而不必在整个模块代码中添加其他缩进级别。是否有可能结束一个像返回类似的Python模块导入?

# module code 
if not condition: 
    # rest of the module code (big) 

我期待这样的事情:

# module code 
if condition: 
    # here I need something like a `return` 
# rest of the module code (big) 

注意,我不想抛出异常,进口通常应通过。

+9

我不知道任何解决方案,但我想你可以把所有的代码放在一个内部模块,并导入,如果条件不符合。 – UncleZeiv

+0

@UncleZeiv:这是一个好主意,你应该把它作为答案! – SingleNegationElimination

+0

对缩进的厌恶是什么? –

回答

5

我不知道任何解决方案,但我想你可以把所有的代码放在一个内部模块,并导入,如果条件不满足。

+0

谢谢,如果没有人在几天内有更好的主意,这仍然是正确的答案。 – sorin

1

我知道没有办法做到这一点。我可以想象的唯一的工作将是return,但这需要在一个函数内。

0

如果不知道你的更高层次的目标是什么,那很难说。 (例如,什么是条件?为什么这很重要?你是否确定你在这里没有XY问题?难道你不能只告诉我们你的总体目标是什么吗?)如果不知道,也很难说该模块将如何被调用。 (作为命令行中的脚本?是通过另一个模块导入的?)这对于了解(a)为什么要避免缩进(二战已结束,我们不需要分配空间或者,为了说得更好,Python是一种使用缩进作为SYNTACTIC FEATURE的语言,所以说“我不能使用这种语法特征”会将许多人视为奇怪的约束条件,就像放弃if-then测试:理论上你可能有办法解决这个限制,有时候可能,但为什么你要进入拳击环,双手绑在背后?),和(b)为什么你不能抛出异常,真的:你完全确定你完全不能抛弃任何例外吗?)。

事实上,你所做的只是问一个“我该如何做X,给定条件A,B和C?”问题,而没有说明你为什么想要做X,或者为什么存在条件A,B和C,甚至是否100%确定它们存在并且无法解决。

如果你真正说的是“我不想在写函数时打{TAB} 40次”,那么真正的问题是你需要一个更好的文本编辑器。如果你真正说的是“我偶然发现缩进在美学上令人不愉快”,那么你应该考虑:(a)论证的另一面是什么;也就是说,为什么人们使用缩进作为语法是有用的; (b)你在这方面的审美偏好是否比你在(a)中提出的理由更重要; (c)鉴于这些事情,Python是否是您个人用来完成任何您的大规模目标的正确工具。 (可以不把缩进当作一种语法特征来使用;但是这对于Python来说非常基本,在哲学上与它相反以至于排除它是一个有力的表示,可能Python并不是完成编程的理想语言目标)。如果你真正说的是你可以从需要在两种不同情况下运行的代码分解到两个模块中,那么它将有利于你重构。如果你所说的是你有意大利式面条代码,而这些代码是完全不可能重构的,那么在你尝试中止模块导入之前,这真的是第一个需要解决的问题。

相关问题