如何在“中使用”有条件地执行代码?块?
-
05-07-2019 - |
题
我想这有点滥用这个功能,但我仍然很好奇是否可以这样做 - 我想做点什么:
with conditional(a):
print 1
这样只有在== True时才会执行 print 1
部分。
这可能吗?
编辑: 就像下面的人一样,这是一种可怕的风格。这只是一个谜语\问题。不要在家里试试,不要为胆小的人等尝试。
解决方案
没有真正的理由这样做,因为条件已经使用 if
语句提供:
if a == True:
print 1
但是,如果你只是要求有趣,答案是你不能。要停止执行内容的,
包装 conditional
将需要以某种方式停止执行,在其 __ enter __
方法中。但它唯一能做到这一点的方法就是引发一个异常,这意味着没有其他代码会运行,除非用 try
语句用来处理案例
a!= True
编辑:看到我在评论和投票中被起诉使用OP的条件( a == True
)我考虑将其更改为如果
,这当然是Python中用于测试条件的习语。但是,我们不知道 OP的想法是什么,以及他是否确实希望 a
成为布尔值,并且如果 a = [1]
(如果将传递)我决定保留原样。
其他提示
if a is True:
print 1
with
statement 旨在提供可靠的进入退出环境。
我看到的唯一方法是在 conditional
中引发异常,如果它的参数为false。 with
body将不会执行,但后面的任何代码都不会执行 - 当然,除或 finally
子句之外的。
假设我有一个带有__enter__和__exit__函数的A类:
class A:
def __init__(self, i):
self.b = i
def __exit__(*args, **kwargs):
print "exit"
def __enter__(*args, **kwargs):
print "enter"
一个函数B将检查对象c中的b是否等于1,否则它将通过。
def b(c):
if c.b == 1:
return c
else:
pass
我可以实现:
with b(A(1)):
print 10
enter
10
exit
但是如果b传递,它将抛出一个AttributeError,因为带的将无法使用。
解决方案是将与b(A(1)):
放在try / except块中。但我不建议这样做。
不隶属于 StackOverflow