验证dict中布尔变量的状态

Lui*_*uez 2 python dictionary boolean

我正在使用一些标志来跟踪以下行为:

is_registered = True
has_paid = False    
has_phone  = True

if (is_registered and has_phone and has_paid):
    do_something
Run Code Online (Sandbox Code Playgroud)

但是如果字段数增加,我更喜欢将它存储在字典中

user_flags = {'is_registered':True,'has_paid':False,'has_phone':True}

if (user_flags['is_registered'] and user_flags['has_paid'] and user_flags['has_phone']):
    do_something
Run Code Online (Sandbox Code Playgroud)

对于少量商品而言,这可能是好的,但如果我说了超过50件商品,它就会变得非常冗长

ale*_*cxe 7

你可以使用all():

>>> user_flags = {'is_registered':True, 'has_paid':False, 'has_phone':True}
>>> all(user_flags.values())
False

>>> user_flags = {'is_registered':True, 'has_paid':True, 'has_phone':True, 'one_more_flag':True}
>>> all(user_flags.values())
True
Run Code Online (Sandbox Code Playgroud)

或者,将逻辑反转为any():

>>> user_flags = {'is_registered':True, 'has_paid':False, 'has_phone':True}
>>> not any(not value for value in user_flags.values())
False

>>> user_flags = {'is_registered':True, 'has_paid':True, 'has_phone':True, 'one_more_flag':True}
>>> not any(not value for value in user_flags.values())
True
Run Code Online (Sandbox Code Playgroud)

  • genexp是不必要的; `all(user_flags.values())`会做同样的事情. (2认同)