我怀疑这个问题的答案将是一个很大的问题! 但是这里。
有没有办法停用(临时)长代码片段而不必评论每一行或者输入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
。)
答案 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()
#"""