网站首页 > 博客文章 正文
如果您是一名 Python 开发人员,您可能遇到过在条件或循环中定义变量的需求。这通常意味着您必须在单独的行上声明变量,这会使代码更长,有时更难阅读。但 Python 3.8 引入了一个有助于简化此过程的新功能:walrus 运算符 (:=)。此运算符允许您直接在表达式中为变量赋值,从而有助于使您的代码更简洁、更简洁。
传统方法:在表达式之外定义变量
传统上,在 Python 中的表达式中定义变量已被证明是困难的,尤其是对于初级开发人员而言。例如,假设您希望接收用户输入,直到它满足某些特定要求(在本例中,假设我们想要 number)。您可能需要在循环或条件之外定义和更新变量。以下是使用 while循环验证 input 的标准方法:
while True:
num = input("Number: ")
if not num.isdigit():
print("Enter a valid number.")
else:
print("Num is:", num)
break
这段代码运行良好,但最终会编写两次 num 变量:一次用于定义它,另一次在 while 循环中。如果不需要在单独的行上定义变量,代码可能会更简洁一些。
Walrus 运算符 (:=) 简介
Python 3.8 引入了 walrus 运算符 (:=),它允许直接在表达式中赋值。当想在循环或条件中使用变量而不单独定义它时,这很有帮助。使用 walrus 运算符,我们可以通过减少对冗余行的需求来简化我们的代码。
walrus 运算符允许您为变量分配一个值,并在同一表达式中返回该变量的值。下面是一个基本示例:
print(message := "Hello, world!")
此行既将 “Hello, world!” 分配给消息,又打印消息 - 一次性完成。walrus 运算符在循环或条件中使用时大放异彩,您希望在循环或条件中保持代码紧凑和清晰。
实际示例:简化用户输入验证
回到最初的获取有效用户输入的示例。以下是 walrus 运算符如何简化代码:
while not (num := input("Number: ")).isdigit():
print("Enter a valid number.")
print("Num is:", num)
在这个例子中,walrus 运算符允许我们在 while 条件本身中将 num 分配给用户的输入。这意味着我们不再需要单独定义 num。代码现在读取为单个紧凑循环:如果输入不是有效数字,它会打印错误消息并循环返回;否则,它将退出并打印数字。
为什么这很有用:
- 紧凑性:代码更短、更直接。我们不需要在循环之前定义 num 或在循环中重新分配它。
- 清晰性:有些人发现将变量赋值直接放在循环的条件中会使流程更容易理解,因为所有条件都封装在一行中。
何时使用 Walrus 运算符
walrus 运算符可能是简化代码的有用工具,但最好有选择地使用它。以下是它闪耀的一些情况,以及您可能希望避免它的情况:
良好的用例:
- 循环条件:walrus 运算符非常适合像上面例子这样的情况,其中需要在循环的条件中进行变量赋值。它减少了冗余代码并将所有内容保存在一个地方。
- 条件语句:当需要在单个 if 语句中同时分配和检查变量时,walrus 运算符可以使您的代码更简洁。
if (length := len(items)) > 10:
print(f"List is too long! It has {length} items.")
- 优化性能:对于表达式中需要昂贵的操作(例如,获取数据或计算值)的情况,使用 walrus 运算符可以避免重复该操作。
何时避免:
- 可读性问题:对于不熟悉 walrus 运算符的开发人员,它会使代码更难阅读。过度使用(尤其是在复杂表达式中)会降低可读性。
- 嵌套表达式:在深度嵌套代码中使用 walrus 运算符或在单行中多次使用 walrus 运算符可能会使其难以遵循。最好用简单明了的表达式来使用它。
通常,walrus 运算符在可读性不受影响的简单作业中效果最佳。如果使用得当,它可以在不牺牲清晰度的情况下保持代码紧凑。
结论
walrus 运算符 (:=) 是 Python 的一个强大补充,它允许开发人员通过在表达式中分配变量来简化代码。在输入验证、循环条件和条件语句等情况下,walrus 算子可以使代码更加简洁并减少冗余。但是,明智地使用它很重要;过度使用或在复杂表达式中使用它会损害可读性。
猜你喜欢
- 2025-01-03 好的代码和坏的代码有哪些本质区别
- 2025-01-03 为了绩效,10行代码被我改成了500行...
- 2025-01-03 一站式统一返回值封装、异常处理、异常错误码解决方案
- 2025-01-03 那些程序员才懂的梗,看到第10张笑喷了,网友:太真实了
- 2025-01-03 Java基础 | 专业排行榜前7的Java代码审计工具
- 2025-01-03 细数软件开发败笔:从代码冗余到架构失衡
- 2025-01-03 总是吐槽别人的代码,好像自己很厉害似的
- 2025-01-03 干掉 “重复代码” 的技巧有哪些
- 2025-01-03 代码太乱不好改?重构的12个理念帮你轻松搞定
- 2025-01-03 一文掌握代码走查规范和代码检查清单
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)