厌倦了if.else的你,能否考虑换一种选择结构?

从if-else到插件化:构建可扩展的技能路由框架实践 在软件架构设计中,解耦与可扩展性是核心原则。插件化架构通过定义标准接口,将功能模块封装为独立组件,实现系统功能的动态组合与扩展。其技术价值在于提升代码复用性、降低维护成本,并支持热插拔部署。这种模式广泛应用于聊天机器人、自动化流程引擎等场景,其中技能路由器作为核心调度器,负责请求的智能分发。本文基于Python实现,通过定义BaseSkill基类、Router调度器与Matcher匹配器,构建了一个支持关键词匹配与权重计算的轻量级框架,并探讨了异步执行、热加载等进阶设计,为中小型应用提供了灵活的功能组合方案 阅读详情
厌倦编码的你

在编码初期,我们因为学会一种句式,掌握一种语法而欢喜。但工作时间久了,却渐渐发现,日常的编码中更多的是让人厌烦的选择逻辑、循环遍历,在加上最擅长的CTRL+C && CTRL+V。你是否想过改变一下自己的代码风格?

万年不变的if.else

提到日常编码,可能我们用到最多的就是if else了,可偏偏Python中没有case when,那么文艺青年的我们,该如何让if else变得与众不同呢?不如看看下面的例子...
假如你是一家酒店的前台,酒店分设了标间、商务间、情侣主题房。现在根据客人的选择,你需要告知他对应的金额。该如何操作?
是不很多人马上开始这么写了:

def show_price_list(user_choice):
    if user_choice.lower() == 'single':
        print(150)
    elif user_choice.lower() == 'business':
        print(300)
    elif user_choice.lower() == 'couple':
        print(500)
    else:
        print("未找到你所需要的房间类型")

show_price_list('couple')

代码没毛病,但不觉得重复感太强吗?我们能否换个方式来编码,like this:

PRICES = {'single': 150, 'business': 300, 'couple': 500}

def show_price_list(user_choice):
    print(PRICES.get(user_choice.lower(), "未找到你所需要的房间类型"))

show_price_list('couple')

不管从代码量,还是代码整洁度来说,是否有一个显著的提升。可很多人又说了,你这是单行打印,如果我需要针选择的结果去调用不同的方法呢?

通过字典执行方法

答案是,你依然可以这么做,举个例子:
首先,我们定义一个 play_list.py

def work():
    print('Oh,no...我要开始工作了。')

def play():
    print("Dota鱼塘局,快来五连坐...")

def drink():
    print("没有撤退可言,不醉不归!")

下来,我们创建一个play_choice.py,并通过导入play_list的方式,来进行方法的选择:

from play_list import work, play, drink

choices = {'work': work, 'play': play, 'drink': drink}

def to_do(user_choice):
    try:
        choices.get(user_choice)()
    except TypeError:
        print("你玩的太溜,我的字典里没有...")

to_do('dance')
to_do('drink')

output:
你玩的太溜,我的字典里没有...
没有撤退可言,不醉不归!
包的导入“BUG”

在文章的结尾,我们来分享一个pyhton的导入bug!
很多人都知道Python有一个all方法,他们的回答一般都是,all用来作为导入限制,禁止导入不在all方法内的模块。这么说对么?错误!
让我们来看看正确的说明:

all affects the from <module> import * behavior only. Members that are not mentioned in all are still accessible from outside the module and can be imported with from <module> import <member>.

all方法只限制那些from module import *的行为,当我明确的from module import member时,并不会阻止!拿我们刚才的例子来说:

__all__ = ['work','play']

def work():
    print('Oh,no...我要开始工作了。')

def play():
    print("Dota鱼塘局,快来五连坐...")

def drink():
    print("没有撤退可言,不醉不归!")

当我们使用如下方式去调用:

from play_list import *

choices = {'work': work, 'play': play, 'drink': drink}

报错: NameError: name 'drink' is not defined

但当我们明确的写出具体的方法是,一切正常

from play_list import work, play, drink

choices = {'work': work, 'play': play, 'drink': drink}

好了,今天的内容就到这里,明天拿all去考考你的朋友,看看他对这个概念是否理解透彻吧!

The End

期待你关注我的公众号清风Python,如果你觉得不错,希望能动动手指转发给你身边的朋友们。
我的github地址:https://github.com/BreezePython

magnetType:声明式数据映射工具,告别if-else与switch-case 在软件开发中,数据转换与映射是高频需求,常涉及枚举值映射、对象结构重塑等场景。传统方案如if-else或switch-case语句,虽直接但难以维护和复用。声明式编程通过描述‘做什么’而非‘怎么做’,能提升代码可读性与可维护性。magnetType库巧妙运用‘磁铁’隐喻,将匹配条件与输出结果封装为独立单元,实现声明式、类型安全的数据转换。其核心价值在于将散落的业务逻辑集中管理,支持复杂条件判断与多步管道操作,尤其适合处理前后端数据适配、表单验证等工程实践。通过融入TypeScript,它在编译阶段提供类型安 阅读详情

相关推荐

C#扩展方法实现链式编程:If/Switch/While的函数式实践

链式编程是一种提升代码可读性与表达力的函数式编程范式,其核心在于通过扩展方法将控制流转化为数据流处理。在C#中,借助泛型约束、类型推导和委托(Predicate/Action/Func)可安全构建If、Switch、While等声明式扩展,实现对对象的状态条件性加工。该技术不改变原有逻辑语义,却显著降低嵌套缩进与括号密度,增强组合性与可测试性,适用于领域模型初始化、配置映射、状态机流转等典型场景,是中高级C#开发者优化代码呼吸感与工程可维护性的实用路径。

rongdmmap的博客 228

if...else语句的四种结构用法

总结一下if…else…其实也就四种 第一种:简单的if…语句 if (condition){ 当条件为 true 时执行的代码 } 第二种:简单的if…else…语句 if (condition) { 当条件为 true 时执行的代码 } else { 当条件不为 true 时执行的代码 } 第三种:嵌套式的if…else…语句 if (...

kangshifu007的博客 26万+

基于分位数回归的静态CoVaR计算 案例与代码

原文链接:https://bbs.pinggu.org/thread-7925441-1-1.html 一、静态CoVaR模型介绍 二、资料简介 实现对相关期刊论文进行论文重现,解决实证分析中的技术操作问题。里面包含了每一步详细的步骤,可以方便的利用这个手册解决大部分利用分位数回归计算静态CoVaR的论文的模型实现问题。即从数据下载到模型实现一整条操作步骤。 关键词:【分位数回归】【Co...

ChenQihome9的博客 7504

python 中if-else的多种简洁的写法

本博客原文来自:https://www.cnblogs.com/xiexiaoxiao/p/7772441.html对原作者表示感谢, 为了让读者更方便理解,这里对原文进行稍许的修改, 并且为尊重原作者的劳动成果,此处仍为转载博客。 因写多了判断语句,看着短短的代码却占据来好几行,于是便搜下if-else简洁的写法,结果也是发现新大陆 4种: 第1种:__就是普通写法 a, b, c = 1, 2, 3 if a>b: c = a else: c = b 第二种:一行表达式,条

像风一样自由的博客 8812

AI Agent生产环境压测指南:并发、延迟与资源瓶颈定位

去年我接触了不下10个AI Agent上线翻车的案例:有做智能客服的公司双11当天流量暴涨3倍,Agent服务直接雪崩,用户咨询全超时,损失超200万订单;有做企业内部RAG Agent的团队,上线后100人同时查询就把向量库打挂,还连累了其他业务的数据库;还有做多智能体系统的团队,压测只测了单请求性能,上线后多Agent交互超时率高达30%。

软件工程实践的博客 171

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 234

Python模式匹配终极指南:Pampy vs 传统if-else的完整对比

Python模式匹配正在改变我们编写条件逻辑的方式!如果你厌倦了冗长的if-else语句和复杂的嵌套条件判断,那么Pampy库可能是你一直在寻找的解决方案。这个轻量级的Python模式匹配库仅用150行代码,就能让你的代码更加优雅、可读性更强,同时保持出色的性能表现。 ## 为什么Python开发者需要模式匹配? 在传统Python编程中,我们经常需要处理各种复杂的条件判断: ```pyth

gitblog_00036的博客 513

【社区分享】从零开始学习 TinyML,建立 TensorFlow 深度学习模型(技术优化篇)

本文来自社区投稿与征集,作者王玉成,ML&IoT Google Developers Expert,温州大学智能锁具研究院总工程师。 了解更多:https://blog.csdn.net/wfing 经过前面几章的讨论,我们了解了TinyML 的概念,完成了一个最简单的TinyML 的模型并且运行在微控制器上,得出最基本的结果。但是在实际的工程应用中,模型建立之后,也需要再进一步结合许多优化方面的技术,这就是我们接下来想要探讨的。 5. 优化 TinyML 这本书也详细的向我...

tensorflowforum的博客 1万+

Java模式匹配终极指南:告别繁琐的if-else语句

在Java开发中,你是否厌倦了编写冗长的if-else语句来处理不同类型的对象?Vavr库的模式匹配功能为这个问题提供了优雅的解决方案!😊 模式匹配是函数式编程的核心概念之一,它让代码更加简洁、可读性更强。 Vavr模式匹配提供了声明式的编程方式,让你能够根据对象的类型和值来执行不同的逻辑。这不仅是语法的改进,更是思维方式的转变! ## 🔍 什么是模式匹配? 模式匹配是一种检查给定数据是

gitblog_00261的博客 376

大语言模型与ROS集成的自然语言机器人控制:开源框架与应用实例

近年来,大语言模型(LLM)与机器人操作系统(ROS)的集成逐步成熟,使得自然语言驱动的机器人控制成为可能。用户输入“捡起绿色方块”或“把微波炉里的饭热好端过来”这类日常语句,机器人能够自动拆解步骤、规划动作并执行。本文梳理2026年前后发布的三个代表性开源框架——ROS-LLM、ROSClaw以及LLM+Nav2基准测试系统,介绍其技术路径与工程落地情况。

Studying…… 634

boost::circular_buffer缓行缓冲区

1、circular_buffer实现了一个环形缓冲区,空间大小是固定的,当到达容器末尾时,将自动利用容器另一端的位置空间。 2、当程序需要容纳大量的元素,但多数情况下仅保存较少数量元素时可以使用circular_buffer_space_optimized,他可以有效的减少内存的占用,提高程序的运行效率。 3、主要接口: 4、实现一个生产者---消费者模式示例: #inc...

小米的修行之路 791

告别复杂if-else!RuleBook的Lambda DSL让规则定义如此简单

你是否厌倦了代码中充斥着复杂的if-else嵌套?是否希望有一种更优雅、更直观的方式来定义业务规则?今天我要介绍一个能够彻底改变你编写业务逻辑方式的强大工具——RuleBook!🚀 这是一个100%基于Java的轻量级规则引擎,通过Lambda表达式和直观的DSL(领域特定语言),让规则定义变得前所未有的简单和优雅。 ## 什么是RuleBook?🤔 RuleBook是一个专为Java开发

gitblog_00737的博客 1124

三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解

三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解

Robot_PLC_HMI_Automation 1万+

Go validator库的3个颠覆性特性:从if-else地狱到声明式验证的革命

作为一名Go开发者,你是否厌倦了在业务逻辑中编写无穷无尽的if-else验证代码?当数据验证逻辑变得复杂时,你是否发现代码的可读性和维护性急剧下降?今天,我将带你深入了解Go validator库如何通过3个颠覆性特性,彻底改变Go开发中的数据验证体验。 ## 🚀 项目诞生:一场数据验证的"静默革命" 在Go语言生态中,数据验证一直是开发者面临的痛点。传统方式下,开发者需要在每个API端点、

gitblog_01162的博客 523

ERROR: Ignored the following yanked versions: 0.8.3, 0.10.19.dev18 的解决办法

关于这个问题,博主是在进行项目中的python依赖包安装的时候遇见的,遇到的异常:关于这个问题,是在。

Spring Boot-Common On With You 643

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python基础(第三章—条件控制语句)

" 人类是易于厌倦的生物、悲伤也好、喜悦也罢、都无法一直持续下去 " Python基础(内容基于逻辑教育Cheney课程)1、运算符的优先级(此处不详细说明)2、条件控制语句2.1、if 语句2.2、input()函数2.3、if-else语句2.4、if-elif-else语句2.5、while语句2.6、break语句和continue语句(下一章提到)3、程序举例 这篇文章将带我们了解到: 运算符的优先级情况 条件控制语句 1、运算符的优先级(此处不详细说明) 一、数学里面的加减乘除及括号 括.

weixin_51927215的博客 690

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

if else是每一句都要执行吗_信仰问答:每一年的圣诞节,我们都设想要让孩子们关注于圣诞节的真正含义,但我们的好想法总是无法执行。这样的尝试真的是毫无希望吗?...

问:每一年的圣诞节,我们都设想要让孩子们关注于圣诞节的真正含义,但是每当节日临近,我们的好想法就会全部泡汤。这样的尝试真的是毫无希望吗?答:不,这并不是毫无希望的,尽管看似很难,但我坚信这样的尝试是很重要的。如果你的孩子们无法在家中学到圣诞节的真正含义是什么,那么他们会从当今的世界中学到这些吗?很可能不会。同时,要考虑到孩子们的年龄和注意力。他们无须长时间的阅读圣经或是祷告。如果我们不注...

weixin_30666751的博客 93

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RuleBook:Java开发者必备的轻量级规则引擎,让业务逻辑更简单直观

RuleBook 是一款100% Java编写的轻量级规则引擎,它支持Lambda表达式,提供简单直观的领域特定语言(DSL),帮助Java开发者以更优雅的方式处理复杂业务逻辑,告别繁琐的if/then/else语句。 ## 为什么选择RuleBook? RuleBook的规则以Java开发者熟悉的方式构建:Java代码。它们按照程序员期望的顺序执行。RuleBook允许你使用易于使用的Lam

gitblog_00386的博客 871

Bish条件语句与循环:用现代语法简化Shell脚本逻辑

Bish作为一门编译到Bash的现代语言,为开发者提供了更舒适的Shell脚本编写体验。本文将重点介绍Bish中的条件语句与循环结构,展示如何用简洁直观的语法替代传统Bash中冗长复杂的逻辑表达。 ## 条件语句:告别繁琐的中括号 Bish的条件判断采用类C语言的语法风格,摒弃了Bash中令人困惑的`[ ]`或`[[ ]]`语法。基础if语句结构如下: ```bash if (y == 1)

gitblog_00631的博客 1039

web前端 - 10 个很酷、很实用JavaScript特性

1、空运算符 如果左侧为空或未定义,则此运算符返回右侧值。 const data= null ?? ‘data’; console.log(data); // expected output: “data” const data1 = 1 ?? 4; console.log(data1); // expected output: 1 逻辑 OR (||) 运算符执行相同的操作,但是,当将 0 作为值传递时,它将视为 false,这使得它容易用于数字。 function add(a, b) { val1 =

icktpxcls的博客 1579

构造使用类C语言的脚本引擎(1)脚本语法定义

构造使用类C语言的脚本引擎(1)作者 :kevin_qing转贴请注明需求:实现npc逻辑,与游戏(服务器)交互。例如与商人NPC对话打开买卖物品窗口等设计:参考传奇2服务器端脚本后(实现的很烂),定义脚本规则如下:1.采用类C语言,因为熟悉C的人很多,而且C语法较严谨,且使用方便2.数据类型只支持int和const string(用于外部函数的参数或返回值).变量只能为int且不需要显示声明.3

Kevin_qing的专栏 3331

【亲测免费】 探索 `match-when`:优雅地处理 JavaScript 条件判断

探索 match-when:优雅地处理 JavaScript 条件判断 在编程中,尤其是 JavaScript 开发中,我们常常需要进行复杂的条件判断。而传统的 if...else 语句有时会让代码变得冗余和难以维护。为了解决这个问题,开发者 创建了一个名为 的库,它提供了一种更加简洁、可读性更强的方式来处理条件逻辑。 项目简介 match-when 是一个轻量级的 JavaScript 库,...

gitblog_00096的博客 435
上一篇: 美女面试官问我Python如何优雅的创建临时文件,我的回答....
下一篇: 帮小姐姐写个爬虫,赢得她请我喝下午茶,Nice啊!
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值