Python3.8中的海象表达式 :=

在Python3.8中新添加了赋值表达式 := ,由于长得与海象的眼睛和象牙很神似,它被亲切的成为“海象表达式”。
它允许将键绑定到名称,然后重新用作计算相应值的一部分,官方推荐使用“海象表达式”来降低代码的复杂性和可读性。

看看怎么用

如果我们想要判断一个列表的长度是否大于10, 如果大于10我们就提示并打印列表长度,一般我们可以这么写:

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
if len(a) > 10:
	print("列表太长了,一共有{}个元素,希望小于等于10个。".format(len(a)))

在这里我们调用了两个 len() 函数,我们也可以换个写法:

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
if (n := len(a)> 10:
	print("列表太长了,一共有{n}个元素,希望小于等于10个。")

在比较 len(a)10 的同时,将 len(a) 的值赋给 n ,在下面打印的时候使用 n 就可以了,这样就避免调用两次 len()

有用吗

也许你会说这看起来并没有显得多简洁,我们可以同过在比较前,先进行赋值的方法来避免调用两次len(),就像这样:

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = len(a)
if n > 10:
	print("列表太长了,一共有{n}个元素,希望小于等于10个。")

但实际上,程序员往往很看重写更少的行,就算可能会因此减慢了程序的运行速度。

比如,这样写其实更有效率:

match = re.match(data)
group = match.group(1) if match else None

但是,有时候程序员宁愿调用两次,来使得只写一行,就像这样:

group = re.match(data).group(1) if re.match(data) else None

如果使用海象表达式那么我们可以这么写:

group = (match := re.match(data)).group(1) if match else None

同样有时候程序员会选择做更多的工作来减少缩进的次数,比如

match1 = pattern1.match(data)
match2 = pattern2.match(data)
if match1:
    result = match1.group(1)
elif match2:
    result = match2.group(2)
else:
    result = None

即使pattern1有匹配项,此代码也会尝试匹配pattern2(在这种情况下,永远不会使用pattern2上的匹配项)。更有效的重写本来是:

match1 = pattern1.match(data)
if match1:
    result = match1.group(1)
else:
    match2 = pattern2.match(data)
    if match2:
        result = match2.group(2)
    else:
        result = None

利用海象表达式,我们就可以这么写:

if (match1 := pattern1.match(data)):
    result = match1.group(1)
elif (match2 = pattern2.match(data)):
    result = match2.group(2)
else:
    result = None

这样看来是不是很好用呢?那么,你会喜欢上这个可爱的 := 吗?

参考资料

[1]Python Developer’s Guide: https://www.python.org/dev/peps/pep-0587/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值