在python中停用代码而不更改缩进或添加注释

时间:2016-01-29 14:20:03

标签: python

我怀疑这个问题的答案将是一个很大的问题! 但是这里。

有没有办法停用(临时)长代码片段而不必评论每一行或者输入if FALSE:并缩进每一行?

举个例子,说我有代码

for A in range(1,LargeNumber):
    DoSuff(A)
    ###DO Mode stuff
    ###....
    Done(A)

但是,由于我还在开发代码,所以我不希望这个冗长的循环运行。我的选择是我所知道的:

评论

#for A in range(1,LargeNumber):
    #DoSuff(A)
    ####DO Mode stuff
    ####....
    #Done(A)

或包装false if语句

if False:
    for A in range(1,LargeNumber):
        DoSuff(A)
        ###DO Mode stuff
        ###....
        Done(A)

这两个都要求我操纵我想要停用的每一行。

是否有一些更聪明的方法可以做到这一点,而无需更改缩进或在每一行添加注释。 (除了可能在这里放LargeNumber=0。)

6 个答案:

答案 0 :(得分:4)

一些建议:

  • 如果你想在开发过程中跳过一个特定的长时间运行的函数,你可以定义并使用一个装饰器跳过该函数并将其添加到它的声明中(当然,这仅在函数中有用)不会返回以后会用到的任何内容)

    def skip(f):
        def _f(*args, **kwargs):
            print("skipped function", f.__name__)
        return _f
    
    @skip
    def long_running_function(foo):
        print("executed function")
    
  • 如果你想跳过循环,就像在你的例子中一样,只需在顶部添加break语句

    for i in range(10):
        break # TODO speed up development; remove for production!
        long_running_function(i)
    

然而,就个人而言,我只想批量评论您想要跳过的代码块。

答案 1 :(得分:3)

根据要求,我建议:

评论大型代码:

"""
for A in range(1,LargeNumber):
        DoSuff(A)
        DO Mode stuff
        ....
        Done(A)
"""

2 """之间的所有内容都会被评论。但是正如tobias_k所说,如果代码中有多行字符串,它就不能正常工作。

但是,正如他所说,你可以让它像这样工作:

"""
print 'anything with sinple quotes instead of double quotes'
"""

答案 2 :(得分:2)

您可以使用以下几种方法:

  • 将代码移动到函数/方法中。您现在可以通过更改一行来停用它。
  • 将代码移动到新模块中的新功能。创建第二个包含相同功能但为空的模块。在import
  • 中切换两个模块
  • 创建配置标志并使用if保护代码。这样,您的配置中只有一个位置可以启用/禁用代码。
  • 将所有代码移动到一个类中。将要停用的代码拆分为方法。扩展类并使用空方法重载该方法。使用该类时,请使用基类或扩展类。
  • 如果您在代码中没有多行字符串,则可以使用

    for A in range(1,LargeNumber):
        deactivated = '''
        DoSuff(A)
        ###DO Mode stuff
        ###....
        Done(A)
        '''
    

答案 3 :(得分:1)

for A in range(1,LargeNumber):
   break
   DoSuff(A)
   ###DO Mode stuff
   ###....
   Done(A)

我一般发现使用'pass','return','continue'或'break'可以很好地进行测试......

答案 4 :(得分:0)

我会使用类似功能标志的东西。 Feature Flags是一个(看起来可能已经不存在?)库,它提供了您正在寻找的功能。

您还可以创建一个功能标记上下文管理器,如下所示:

class SkipWith(Exception): pass

@contextmanager
def feature_flag(flag):

    @contextmanager
    def check_active():
        deactivated = ['four', 'five']
        activated = ['one', 'two', 'three']
        if flag in deactivated:
            if flag == 'five':
                print('Five is right out')
            raise SkipWith()
        else:
            yield
    try:
        yield check_active
    except SkipWith:
        print('Skipping flag')


with feature_flag('one') as check, check():
    print('one')

with feature_flag('two') as check, check():
    print('two')

with feature_flag('five') as check, check():
    print('five')

# Ouput:
# one
# two
# Five is right out
# Skipping flag

答案 5 :(得分:0)

@CoMartel的docstring方法的一项改进是使其可以通过更改单个字符即可切换:

#"""
for A in range(1,LargeNumber):
    DoSuff(A)
    ###DO Mode stuff
    ###....
    Done(A)
#"""

要禁用/重新启用该块,只需在第一行中删除/重新添加前导哈希符号(#)。

这甚至可以用于两个代码块之间的快速切换:

#"""
this_block_is_active_now()
"""
this_block_alternatively_gets_active_when_removing_the_hash_sign()
#"""
相关问题