Python:条件表达式中的替换表达式
我可以这样做:Python:条件表达式中的替换表达式,python,python-3.x,Python,Python 3.x,我可以这样做: ["val1" if some_method() == True else "val2" if some_method() == False else "val3"] [with some_method() as m: "val1" if m == True else "val2" if m == False else "val3
["val1" if some_method() == True
else "val2" if some_method() == False
else "val3"]
[with some_method() as m:
"val1" if m == True
else "val2" if m == False
else "val3"]
这是可行的,但是我必须多次调用某些_方法。当然,我可以这样做:
m = some_method()
["val1" if m == True
else "val2" if m == False
else "val3"]
但是现在我已经声明了代码的其余部分。
有更好的方法吗?我在想这样的事情:
["val1" if some_method() == True
else "val2" if some_method() == False
else "val3"]
[with some_method() as m:
"val1" if m == True
else "val2" if m == False
else "val3"]
Python本身不支持switch语句或let块,这两种语句都可以直接解决变量作用域问题。但是我们总是可以用lambdas来近似构造
[(lambda m: "val1" if m == True else "val2" if m == False else "val3")(some_method())]
但在这一点上,您可能想问问自己,是否最好将这段逻辑放入它自己恰当命名的函数中
def some_method_val():
m = some_method()
return "val1" if m == True else "val2" if m == False else "val3"
[some_method_val()]
那么m只在函数调用期间存在,而不是在整个程序中存在,如果选择得当,函数名可以作为方便的文档,说明为什么要使用布尔函数执行此分派操作。Python本身不支持switch语句或let块,这两种方法都可以直接解决变量作用域问题。但是我们总是可以用lambdas来近似构造
[(lambda m: "val1" if m == True else "val2" if m == False else "val3")(some_method())]
但在这一点上,您可能想问问自己,是否最好将这段逻辑放入它自己恰当命名的函数中
def some_method_val():
m = some_method()
return "val1" if m == True else "val2" if m == False else "val3"
[some_method_val()]
那么m只在函数调用期间存在,而不是在整个程序中存在,如果选择得当,函数名可以作为方便的文档,说明为什么要使用布尔函数执行此分派操作。:
或者如果方法的结果是可散列的:
[{True: "val1", False: "val2"}.get(some_method(), "val3")]
:
或者如果方法的结果是可散列的:
[{True: "val1", False: "val2"}.get(some_method(), "val3")]
布尔的全部意义在于它们有两种状态——对或错。在第三种甚至更多的状态中混合会破坏布尔逻辑的观点。这些if表达式很难编写,这不应该激励你给它们添加更多的逻辑,而是采取一种完全不同的方法。这不是我想要做的。真/假应该是一个简单的例子来解释我想做什么。很抱歉搞混了。布尔的全部意义在于它们有两种状态——真或假。在第三种甚至更多的状态中混合会破坏布尔逻辑的观点。这些if表达式很难编写,这不应该激励你给它们添加更多的逻辑,而是采取一种完全不同的方法。这不是我想要做的。真/假应该是一个简单的例子来解释我想做什么。很抱歉给你带来了困惑。