问题
在我的代码中,为了方便起见,我使用以下构造来更改标志的状态,无论其当前状态如何:
flag *= -1
这个设计相当方便,唯一的缺点是我不喜欢它的验证方式:
if flag == 1:
print('True')
检查 True - False 标志肯定看起来要好得多:
if flag:
print('True')
然而这样的flag的状态转换设计却让我眼睛流血:
if flag:
flag = False
else:
flag = True
我想收集这些选项中最好的:
- 无条件验证的可能性
- 能够替换一行(简单)中的值
我想到了什么选择:
方法一:类
最符合逻辑和 Pythonic 的方法是使用类。至少,我得到了这样的东西:
class Flag():
def __init__(self, val:bool):
self.val = val
def __bool__(self):
return self.val
def switch(self):
if self.val:
self.val = False
else:
self.val = True
它甚至可以工作,但问题是这个类调用起来很不方便:
我们应该flag = True
这样做flag = Flag(True)
。当我忘记注册这个类,或者尝试从不属于我的方法获取标志值时,在最意想不到的时刻,什么会像契诃夫的枪一样爆炸。
方法2:将标志塞到某处
实际上,这个想法类似于类:
def switch(dct: dict):
if dct['val']:
dct['val'] = False
else:
dct['val'] = True
缺点:您知道如何存储和检查它吗?我想,这尽可能不方便
方法三:记住退货
def switch(val):
if val:
return False
else:
return True
my_flag = True
print(my_flag)
my_flag = switch(my_flag)
print(my_flag)
总体来说还可以,但还是不太喜欢这个设计my_flag = switch(my_flag)
。
其实问题是:
您认为存储和切换标志的最佳方式是什么?很可能有一些非常简单的东西可以做我想要的事情,但没有立即找到这样的方法。
哦,是的,这个问题纯粹是理论上的,甚至是关于“赏心悦目的”,但总的来说,我希望本质是清楚的
我很难理解这些复杂性,有些地方我不明白。但我会尝试: