”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Python 的 Walrus 运算符优化代码:真实示例和要避免的反模式

使用 Python 的 Walrus 运算符优化代码:真实示例和要避免的反模式

发布于2024-08-27
浏览:598

Optimizing Your Code with Python

介绍:
Python 3.8 中引入的 walrus 运算符是开发人员简化和优化代码的有用工具。它允许在表达式内分配变量,使其成为一种更简洁、更高效的编程方法。然而,像任何工具一样,它应该适度使用并具有良好的判断力。在本教程中,我们将探索海象运算符使用的真实示例,并重点介绍一些要避免的反模式。

海象运算符用法的真实示例:
1.简化条件语句
海象运算符最常见的用例之一是简化条件语句。假设我们有一个返回字符串长度的函数,我们想要检查长度是否大于 10。使用 walrus 运算符,我们可以直接在条件语句中分配变量长度,从而节省一行代码。

不带海象运算符的条件语句示例

长度=len(字符串)
如果长度 > 10:
print("字符串长度超过 10 个字符。")

使用海象运算符的示例

if (长度:= len(字符串)) > 10:
print("字符串长度超过 10 个字符。")

2.避免重复函数调用
在某些情况下,使用海象运算符可以通过避免重复的函数调用来提高代码的性能。在下面的示例中,我们想要计算学生的平均成绩,但我们还需要检查学生是否通过了课程。如果没有海象运算符,我们需要调用该函数两次,但是有了它,我们可以将函数的结果分配给一个变量,并在条件语句和计算中使用它。

没有海象运算符的示例

grade1 = 计算成绩(学生, test1)
年级 2 = 计算成绩(学生,测试 2)
if (等级1 等级2) / 2 >= 70:
print("学生已通过该课程。")

if ((年级1 := 计算成绩(学生, 测试1)) (成绩2 := 计算成绩(学生, 测试2))) / 2 >= 70:
print("学生已通过该课程。")

3.简化列表推导式
列表推导式是用于操作和过滤列表中的数据的强大工具。然而,复杂的列表推导式可能会变得难以阅读和维护。使用海象运算符可以通过允许我们在表达式中分配变量来简化这些推导式。

不使用海象运算符的列表理解示例

结果 = [compute_profit(sales, cost) 对于销售,如果compute_profit(sales, cost) > 50,则 sales_data 中的成本]

使用海象运算符的示例

结果 = [(利润 :=compute_profit(sales, cost)) 销售,如果利润 > 50,则 sales_data 中的成本]

反模式:如何不使用海象运算符:
1.复杂列表推导式
虽然海象运算符可以简化列表理解,但过度使用它可能会导致复杂且不可读的代码。在这个反模式中,我们看到具有多个嵌套条件和赋值的列表理解。这可能会变得难以阅读和维护,最好将逻辑分解为单独的步骤。

使用嵌套海象运算符的混乱列表理解示例

sales_data = [(100, 70), (200, 150), (150, 100), (300, 200)]
结果 = [(销售额, 成本, 利润, sales_ratio) 销售额, sales_data 中的成本 if (利润 :=compute_profit(销售额, 成本)) > 50
if (sales_ratio := sales / cost) > 1.5 if (profit_margin := (profit / sales)) > 0.2]

2.嵌套海象运算符
使用嵌套海象运算符可能会导致代码难以阅读和理解。在此示例中,我们在单个表达式中看到嵌套运算符,这使得解压逻辑和理解代码变得困难。最好将逻辑分解为多行,以提高可读性和可维护性。

嵌套海象运算符示例

值 = [5, 15, 25, 35, 45]
阈值 = 20
结果=[]
对于值中的值:
if (above_threshold := value > 阈值) and (incremented := (new_value := value 10) > 30):
结果.append(new_value)
打印(结果)

结论:
海象运算符是简化和优化代码的强大工具,但应谨慎使用。通过了解它的功能和限制,我们可以在代码中有效地使用它并避免常见的反模式。

MyExamCloud 的 Python 认证练习测试对于准备任何 Python 认证的人来说是一个有用的工具。

版本声明 本文转载于:https://dev.to/myexamcloud/optimizing-your-code-with-pythons-walrus-operator-real-world-examples-and-anti-patterns-to-avoid-10ii?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-06-25
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-06-25
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中可能会遇到一个冲突,其中3派对软件包将另一个带有导入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    编程 发布于2025-06-25
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-06-25
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-06-25
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-06-25
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-06-25
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-06-25
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-06-25
  • 同实例无需转储复制MySQL数据库方法
    同实例无需转储复制MySQL数据库方法
    在同一实例上复制一个MySQL数据库而无需转储在同一mySQL实例上复制数据库,而无需创建InterMediate sqql script。以下方法为传统的转储和IMPORT过程提供了更简单的替代方法。 直接管道数据 MySQL手动概述了一种允许将mysqldump直接输出到MySQL clie...
    编程 发布于2025-06-25
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-06-25
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-06-25
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-06-25
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-06-25

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3