Python让代码更简洁的方法(三), 赋值表达式(海象运算符 :=)

前言:

Python使用缩进来标识语句块, 来表明代码之间的逻辑层级关系, 有的时候一些简单的代码逻辑,确写了好几行, 看起来既不简洁也不优雅. 

其实Python提供了更贴近自然语言的语法, 从而写出更高可读性的代码. 本文介绍一下海象操作符.

相关文章: 【条件表达式】【列表表达式】

我们经常遇见这样的代码

# example 1
In [1]: lst = [1, 2, 3, 4]
In [2]: n = len(lst)
In [3]: if n > 3:
    print(f"List is too long {n} elements, expected <= 3")

# example 2
In [4]: lst = [1, 2, 3, 4]
In [5]: if len(lst) > 3:
   ...:    print(f"List is too long {len(lst)} elements, expected <= 3")

在条件语句之后的代码块中, 如果需要用到条件的值,

一种方法是要赋值给一个中间变量 n = len(lst)该然后使用变量n, 如上example 1

如果不想用赋值给一个变量, 则需要在代码中再次执行表达式. 如上example 2中 len(lst)被执行了2次. Python 3.8 中引入了新的语法 海象运算符:=可以帮我们解决这个问题

In [1]: lst = [1, 2, 3, 4]

In [2]: if (n:=len(lst)) > 3:
   ...:     print(f"List is too long {n} elements, expected <= 3")

:=运算符的正式名称为赋值表达式运算符。也被称为海象运算符, 原因是=比较像海象那俩大牙.

 1. 海象运算符的原理

海象表达式语法

var := <expression>

与一般的赋值语句 var = expr 不同, 海象运算符允许我们在同一个表达式中为变量赋值返回该值。在ipython中输入

In [1]: (walrus := 3)
Out[1]: 3

In [2]: walrus
Out[2]: 3

 可以看到, 赋值语句同时返回了 valrus的当前值.

2. 海象运算符的使用

 2.1 在while 语句中使用海象运算符

In [1]: n = 19
In [2]: while n > 0:
   ...:     print('count down: ', n)
   ...:     n = n-1


# 使用海象运算符
In [3]: n = 19
In [4]: while (n:= n-1) > 0:
   ...:     print('count down: ', n)

 在读取可耗尽的生成器资源时,例如文本读取,代码更加简洁

In [1]: chunk = resource.read(8192)
In [2]: while chunk:
   ...:     process(chunk)
   ...:     chunk = resource.read(8192)

# 使用海象运算符
In [3]: while chunk := resource.read(8192):
   ...:     process(chunk)

2.2 列表表达式中使用

filtered_data = [
  f(x) for x in data
  if f(x) is not None
]

上面代码中,条件语句和赋值阶段中 f(x) 会被执行2次。 使用海象预算符, 则只需执行一次

filtered_data = [
  y for x in data
  if (y := f(x)) is not None
]

总结:

海象运算符可以为变量赋值的同时返回该运算符, 用作条件判断。

适用场景, 后续要使用条件语句判断的数据时。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值