我试图找出最短,最pythonic的方式来实现类似于以下语法的方式:
if A and (B if C):
print(A)
以下列方式:
B
(因此(B if C)
为True)。if A and B:
这可以通过各种单独的if
语句来完成,但是我的最终目的是使它成为对值分配的列表理解。
编辑:
我想进行的列表理解是:
methods = [name for (name, func) in locals().items() \
if callable(func) and (not __name__ == '__main__' or \
func.__module__ == __name__)]
以便它返回我在该模块中定义的函数名称,以及methods
是从外部导入的。
答案 0 :(得分:4)
如果我的旧语句逻辑不会使我失败=>
if A and (not C or B):
print(A)
说明:"B if C" <=> C -> B <=> not C or B
仅当B
成立时,才评估表达式C
。
答案 1 :(得分:2)
您的假设:
那不是:
if A and (not C or B):
print(A)
C
为假,则not C
为True
,我们不评估B
C
为真,则not C
为False
,我们必须评估B
答案 2 :(得分:2)
您的if
伪运算符只是逻辑含义,其中
C -> B = not C or B
这意味着您只想要
if A and (not C or B):
当C
为False时,A and (not C or B) == A and (True or B) == A and True == A
。
当C
为True时,A and (not C or B) == A and (False or B) == A and B
。
答案 3 :(得分:2)
此:
if A and (B if C else True):
pass
最接近您的“伪代码”,在Python中使用条件表达式x if cond else y
。假设B=True
在C
为False
的情况下,使if
语句仅考虑A
的布尔值
答案 4 :(得分:1)
我可能会这样写:
condition = (A and B) if C else A
if condition:
print(A)
我只将条件分解为一个单独的变量,因为我认为将if
与Python条件表达式混合会显得有些混乱。无论是否在列表理解中使用它,您都必须打个电话。