Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何基于布尔变量反转列表成员资格检查?_Python_List_Membership - Fatal编程技术网

Python:如何基于布尔变量反转列表成员资格检查?

Python:如何基于布尔变量反转列表成员资格检查?,python,list,membership,Python,List,Membership,如何基于布尔变量反转检查列表成员资格 我正在寻找一种简化以下代码的方法: #变量:`is_allowed:boolean`、`action:string`和`allowed_actions:string列表` 如果允许: 如果操作不在允许的\u操作中: 打印(必须允许r'{action}!') 其他: 如果在允许的操作中执行操作: 打印(不允许使用r'{action}!') 我觉得必须有一种方法来避免检查两次,一次用于in,另一次用于not in,但无法找到一种更简洁的方法。鉴于您的特定代码的

如何基于布尔变量反转检查列表成员资格

我正在寻找一种简化以下代码的方法:

#变量:`is_allowed:boolean`、`action:string`和`allowed_actions:string列表`
如果允许:
如果操作不在允许的\u操作中:
打印(必须允许r'{action}!')
其他:
如果在允许的操作中执行操作:
打印(不允许使用r'{action}!')

我觉得必须有一种方法来避免检查两次,一次用于
in
,另一次用于
not in
,但无法找到一种更简洁的方法。

鉴于您的特定代码的结构,我认为您唯一能做的改进就是将
操作存储在一个变量中:

present = action in allowed_actions
if is_allowed:
    if not present:
        print(r'{action} must be allowed!')

else:
    if present:
        print(r'{action} must NOT be allowed!')

考虑到特定代码的结构方式,我认为您可以做的唯一改进就是将
操作存储在允许的\u操作中
存储在变量中:

present = action in allowed_actions
if is_allowed:
    if not present:
        print(r'{action} must be allowed!')

else:
    if present:
        print(r'{action} must NOT be allowed!')

将测试结果与允许的
进行比较。然后允许使用
来组合正确的错误消息

if (action in allowed_actions) != is_allowed:
    print(action, "must" if is_allowed else "must NOT", "be allowed!")

将测试结果与允许的
进行比较。然后允许使用
来组合正确的错误消息

if (action in allowed_actions) != is_allowed:
    print(action, "must" if is_allowed else "must NOT", "be allowed!")


如果操作在允许的操作中,只检查是否允许,并将其放在一行上。。考虑到约束条件,并且不知道代码的其余部分,您必须检查两次,但仅当操作由于短路而在列表中时…但是meh,我想这与您得到的是一样的…您的代码在任何一次执行中都不会执行两次检查,因此很难看到您可以“改进”什么。行越短并不一定越好,事实上会增加理解的难度。@barny:我假设我可能不知道在这种情况下可以使用某些特定的python习惯用法。我强烈主张“保持简单”——例如,一行代码可能很难理解/维护/调试。Kindall的回答是,毕竟,行数更短,但要理解你是否有维护它的工作,时间也不会太短。完全同意!但在我看来,这似乎是“错误的”(过于冗长和笨拙),因此我认为必须有一种更简单、更清晰的方法来处理它,只检查是否允许操作,如果操作在允许的操作中,并将其放在一行上。。考虑到约束条件,并且不知道代码的其余部分,您必须检查两次,但仅当操作由于短路而在列表中时…但是meh,我想这与您得到的是一样的…您的代码在任何一次执行中都不会执行两次检查,因此很难看到您可以“改进”什么。行越短并不一定越好,事实上会增加理解的难度。@barny:我假设我可能不知道在这种情况下可以使用某些特定的python习惯用法。我强烈主张“保持简单”——例如,一行代码可能很难理解/维护/调试。Kindall的回答是,毕竟,行数更短,但要理解你是否有维护它的工作,时间也不会太短。完全同意!但在我看来这是“错误的”(太冗长和笨拙了),所以我认为一定有一种更简单、更干净的方法来处理它是的,但是。如果你不经意间发现它,要花多长时间才能知道它在做什么?根据我的经验,这是处理布尔选项时的一个相当常见的习惯用法,例如GUI中的复选框,它会反转某些行为。如果你使用
xor
来自操作符导入xor
)而不是
,可能更容易理解=。它们是一样的,但是如果您不熟悉“不等于”的技巧,那么解析
xor
要容易得多。有人批评说,其他编写方法可能更具可读性,但我见过很多这样的代码。更好的变量名可能会有很大帮助。是的,变量名根本没有帮助。是的,但是。如果你不经意间发现它,要花多长时间才能知道它在做什么?根据我的经验,这是处理布尔选项时的一个相当常见的习惯用法,例如GUI中的复选框,它会反转某些行为。如果你使用
xor
来自操作符导入xor
)而不是
,可能更容易理解=。它们是一样的,但是如果您不熟悉“不等于”的技巧,那么解析
xor
要容易得多。有人批评说,其他编写方法可能更具可读性,但我见过很多这样的代码。更好的变量名可能会有很大帮助。是的,变量名根本没有帮助。