吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2176|回复: 19
收起左侧

[Python 原创] Python 3.8 海象运算符使用介绍

  [复制链接]
简讯 发表于 2024-1-27 11:07

Python 是一种通用且功能强大的编程语言,它本身提供了许多功能和有趣的语法,使编码变得更简单、更具表现力。然而,Python 中有些运算符并不常用,也不为很多程序员所知。在这篇博文中,主要介绍 Python3.8 版本中新增的海象运算符。

什么是海象运算符

海象运算符也称为赋值表达式操作符,是 Python 3.8 中引入的一个新特性。它允许为变量赋值,并在同一个表达式中使用,而无需写两次。海象运算符的语法是 :=,它可以用于不允许使用常规赋值语句的地方,例如 lambda 函数、列表理解或条件表达式。

例如,假设您想编写一个函数来检查一个字符串是否是回文字符串(正向阅读和反向阅读时是否相同)。常见的方法是将字符串倒转,然后与原始字符串进行比较,如下所示:

def is_palindrome(s):
    return s == s[::-1]

但是,这种方法会创建一个字符串副本,对于大字符串来说效率很低。使用海象运算符,可以避免这种情况,方法是将反转的字符串赋值给一个变量,然后在同一个表达式中使用,就像下面这样:

def is_palindrome(s):
    return (rev := s[::-1]) == s

这样,只需反转字符串一次,如有需要,还可以将变量 rev 用于其他用途。

为什么使用海象运算符

当你想避免重复计算或函数调用,并节省一些代码行数时,海象运算符就能派上用场。例如,假设您想编写一个函数来计算字符串中元音的数量。常用的方法是使用一个循环和一个计数器,如下所示:

def count_vowels(s):
    vowels = "aeiou"
    count = 0
    for c in s:
        if c in vowels:
            count += 1
    return count

不过,有了海象运算符,您可以使用列表理解和求和函数来简化这一过程,就像这样:

def count_vowels(s):
    return sum(c in (vowels := "aeiou") for c in s)

这样,您只需要一行代码,而且不需要声明计数器变量。

在另一种情况下,当您想使用一个依赖于条件的值,并避免对条件进行两次求值时,海象运算符就能派上用场。例如,假设您想编写一个函数,返回两个数字的最大值,但如果两个数字相等,则返回它们的和。常用的方法是使用 if-else 语句,如下所示:

def max_or_sum(a, b):
    if a == b:
        return a + b
    else:
        return max(a, b)

不过,有了海象运算符,您可以使用条件表达式来简化这一过程,如下所示:

def max_or_sum(a, b):
    return (a + b) if (equal := a == b) else max(a, b)

这样,只需检查数字是否相等一次,如有需要,还可以将变量 equal 用于其他用途。

如何使用海象运算符

海象运算符可以在任何允许变量名的表达式中使用,例如 lambda 函数、列表理解、生成器表达式、集合理解、字典理解、条件表达式或函数调用。但是,在使用海象运算符时,需要注意一些规则和限制:

  • 使用海象运算符赋值的变量名必须是有效的 Python 标识符,即必须以字母或下划线开头,并且只能包含字母、数字和下划线。不能使用关键字、字面量或运算符作为变量名。

  • 使用海象运算符指定的变量名必须用括号括起来,除非它是括起来的表达式中的唯一表达式。例如,可以写(x := 1) + 2,但不能写 x := 1 + 2

  • 使用海象运算符赋值的变量名的作用域是最近的外层代码块,即可以在同一代码块内访问,但不能在代码块外访问。例如,您可以写 if (x := 1) > 0: print(x),但不能写 if x := 1: print(x)

  • 使用海象运算符分配的变量名不能在同一表达式中重新分配,也就是说,不能在同一表达式中多次使用海象运算符分配同一个变量名。例如,可以写 (x := 1) + (y := 2),但不能写 (x := 1) + (x := 2)

  • 使用海象运算符分配的变量名不能在同一表达式中删除,也就是说,不能对同一表达式中使用海象运算符分配的变量名使用 del 语句。

海象运算符是一个使用频率很低的 Python 操作符,它允许您给变量赋值并在同一个表达式中使用。当您想避免重复计算或函数调用、节省代码行数或使用一个取决于条件的值时,它可能会很有用。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
pk555157815 + 1 + 1 谢谢@Thanks!
lookfeiji + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Yifan2007 发表于 2024-5-25 11:14
您之前的帖子【Python 教程】使用 Python 和大漠插件进行文字识别
https://www.52pojie.cn/thread-1108004-1-1.html
(出处: 吾爱破解论坛)
可以附一下使用案例吗
BTFKM 发表于 2024-1-31 10:57
其实就是为了避免一次赋值 1楼例子针对该例老方法更简洁
[C] 纯文本查看 复制代码
def max_or_sum(a, b):
    return (a + b) if (a == b) else max(a, b)
xixicoco 发表于 2024-1-27 13:01
老M 发表于 2024-1-27 13:17
有点抽象....
补补23456 发表于 2024-1-27 13:39
感谢分享,很象形的运算符
bluerabbit 发表于 2024-1-27 14:07
谢谢,很有用
sai609 发表于 2024-1-27 14:20
现在已经是python3.12
Arcticlyc 发表于 2024-1-27 14:54
原来叫海象运算符哦
Htree 发表于 2024-1-27 16:12
使用频率确实低,第一次听说这个运算符
头像被屏蔽
hjsen 发表于 2024-1-27 16:18
提示: 作者被禁止或删除 内容自动屏蔽
YuYu798 发表于 2024-1-27 19:07
用python这么久了  第一次听  也没用过这个😂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表