gpt4 book ai didi

python - "and"在变量赋值中的用例

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:36 25 4
gpt4 key购买 nike

我今天发现您可以在变量赋值中使用,类似于的使用方式。我很少遇到以这种方式使用 ,但从未听说过有人以这种方式使用 。这个功能是否过于晦涩而不推荐使用,或者是否有一些具体的用例有助于代码的清晰度或简洁性?

a = 1
b = 3
# c is equal to b unless a or b is False; then c is equal to the "False" value. False may be 0, [], False, etc.
c = a and b
print(f'a = {a}, b = {b}, c = {c}')
>>>a = 1, b = 3, c = 3

d = 1
e = 5
# f is equal to d unless d is False; then f is equal to e. Again, "False" may be 0, [], False, etc.
f = d or e
print(f'd = {d}, e = {e}, f = {f}')
>>>d = 1, e = 5, f = 1

似乎有一个奇怪的不一致之处,使用运算符评估条件并将变量设置为该条件的真实性显然很好(例如 g = h > ij = k 是 l 等)。

不过,似乎是个异常(exception)。不是评估赋值的条件权,而是根据上述注释中描述的规则对变量进行赋值。为什么 c = a and b 不根据 a 计算为 TrueFalse >b 有真值? (以上示例的计算结果为 True)

谢谢

最佳答案

使用 进行短路是一种用很少的代码表达您的意图的便捷方式(确实是一个理想的目标)。

考虑这个初始化,以及如果 user 不是非空的,你将不得不做什么。

name = user and user.name

当然,三元将是一个类似的单行

name = user.name if user else None

但是它的可读性好吗?

最后,当使用短路 链接多个 getter 时,真正开始拯救你的理智。

coords = user and user.location and user.location.coords

当您确定覆盖错误值不会有问题时,使用 提供更好的默认值而不是 None

name = user and user.name or 'Unnamed'

关于python - "and"在变量赋值中的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com