Python开发系列课程(6) - 要不要使用复杂表达式

Python 全栈开发从入门到实战进阶课程 课程涵盖了 Python 编程的多个方面,包括编程基础、数据结构、函数与装饰器、面向对象编程、文件 IO 和文本处理、并发编程、网络编程、数据库、前端开发、爬虫以及前后端分离博客项目等内容。通过丰富的视频讲解和实例演示,帮助学员全面掌握 Python 编程技能。 阅读详情

要不要使用复杂表达式

Perl语言的原作者Larry Wall曾经说过,伟大的程序员都有三个优点:懒惰、暴躁和自负。乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同的意义。首先,懒惰会促使程序员去写一些省事儿的程序来辅助自己或别人更好的完成工作,这样我们就无需做那些重复和繁琐的劳动;同理能够用3行代码解决的事情,我们也绝不会写出10行代码来。其次,暴躁会让程序员主动的去完成一些你还没有提出的工作,去优化自己的代码让它更有效率,能够3秒钟完成的任务,我们绝不能容忍1分钟的等待。最后,自负会促使程序员写出可靠无误的代码,我们写代码不是为了接受批评和指责,而是为了让其他人来膜拜。

那么接下来就有一个很有意思的问题值得探讨一下,我们需要一个程序从输入的三个数中找出最大的那个数。这个程序对任何会编程的人来说都是小菜一碟,甚至不会编程的人经过10分钟的学习也能搞定。下面是用来解决这个问题的Python代码。

a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
if a > b:
    the_max = a
else:
    the_max = b
if c > the_max:
    the_max = c
print('The max is:', the_max)

但是我们刚才说了,程序员都是懒惰的,很多程序员都会使用三元条件运算符来改写上面的代码。

a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
the_max = a if a > b else b
the_max = c if c > the_max else the_max
print('The max is:', the_max)

需要说明的是,Python在2.5版本以前是没有上面代码第4行和第5行中使用的三元条件运算符的,究其原因是Guido van Rossum(Python之父)认为三元条件运算符并不能帮助 Python变得更加简洁,于是那些习惯了在C/C++或Java中使用三元条件运算符(在这些语言中,三元条件运算符也称为“Elvis运算符”,因为?:放在一起很像著名摇滚歌手猫王Elvis的大背头)的程序员试着用andor运算符的短路特性来模拟出三元操作符,于是在那个年代,上面的代码是这样写的。

a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
the_max = a > b and a or b
the_max = c > the_max and c or the_max
print('The max is:', the_max)

但是这种做法在某些场景下是不能成立的,且看下面的代码。

a = 0
b = -100
# 下面的代码本来预期输出a的值,结果却得到了b的值
# 因为a的值0在进行逻辑运算时会被视为False来处理
print(True and a or b)
# print(a if True else b)

所以在Python 2.5以后引入了三元条件运算符来避免上面的风险(上面代码被注释掉的最后一句话)。那么,问题又来了,上面的代码还可以写得更简短吗?答案是肯定的。

a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
print('The max is:', (a if a > b else b) if (a if a > b else b) > c else c)

但是,这样做真的好吗?如此复杂的表达式是不是让代码变得晦涩了很多呢?我们发现,在实际开发中很多开发者都喜欢过度的使用某种语言的特性或语法糖,于是简单的多行代码变成了复杂的单行表达式,这样做真的好吗?这个问题我也不止一次的问过自己,现在我能给出的答案是下面的代码,使用辅助函数。

def the_max(x, y):
    return x if x > y else y


a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
print('The max is:', the_max(the_max(a, b), c))

上面的代码中,我定义了一个辅助函数the_max用来找出参数传入的两个值中较大的那一个,于是下面的输出语句可以通过两次调用the_max函数来找出三个数中的最大值,现在代码的可读性是不是好了很多。用辅助函数来替代复杂的表达式真的是一个不错的选择,关键是比较大小的逻辑转移到这个辅助函数后不仅可以反复调用它,而且还可以进行级联操作。

当然,很多语言中比较大小的函数根本没有必要自己来实现(通常都是内置函数),Python也是如此。Python内置的max函数利用了Python对可变参数的支持,允许一次性传入多个值或者一个迭代器并找出那个最大值,所以上面讨论的问题在Python中也就是一句话的事,但是从复杂表达式到使用辅助函数简化复杂表达式这个思想是非常值得玩味的,所以分享出来跟大家做一个交流。

a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
print('The max is:', max(a, b, c))
Python进阶语法之三元表达式详解 Python三元表达式(Ternary Expressions)是一种简洁高效的编写条件逻辑的方式。与许多其他编程语言一样,Python也提供了三元表达式,可以在一行代码中写出一个`if-else`条件语句。在这篇博文中,我们将通过多个例子详细解释Python中的三元表达式 阅读详情

相关推荐

Python正则表达式处理复杂文本详解

Python正则表达式(RegularExpression)是一个强大的字符串处理工具,广泛应用于文本匹配、数据提取等场景。本文介绍了正则表达式的基本语法(如.^$*+?等特殊字符)、Python中re模块的常用方法(match/search/findall/sub等),以及高级用法(捕获组、非贪婪匹配和断言)。通过电话号码匹配、日志分析等示例,展示了正则表达式在实际应用中的灵活性和高效性。掌握这些技巧可以显著提升数据处理和文本分析的效率,使复杂字符串操作更加简洁。

Rocky006的博客 1062

【java performance】避免在循环条件使用复杂表达式

在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。 例子: import java.util.Vector; class CEL { void method (Vector vector) { for (int i = 0; i ; // ... } }

开卷有益 3908

构建支持复杂表达式Python计算器

Python 作为一门广泛使用的高级编程语言,以其简洁的语法和强大的功能备受开发者的青睐。本章旨在对 Python 的语法基础进行介绍,包括语句、表达式、变量、数据类型、控制流程以及函数等基本元素。通过学习本章内容,读者可以构建起 Python 编程的初级框架,为进一步深入学习打下坚实的基础。Python 拥有简洁明了的语法,使其成为初学者的理想选择。它强调代码的可读性和简洁的语法设计,与其它编程语言相比,Python 代码更接近自然语言。

weixin_42602368的博客 1103

编程规范

指导你避免写出坏代码! 1、编程时指导思想的优先级顺序。 第一优先级 正确性:功能性需求 健壮性:异常处理 第二优先级 可维护性:代码是给人看的! 可移植性:代码与环境的相关程度尽可能低 第三优先级 效率 资源 2、代码应该简单、清晰,显式表达意图,避免复杂的编程技巧。 3、在同一层次编写代码,不要用“如何做”取代“做什么”。 1)段落结构划分 2)自下而上,自上而下 ...

danxibaoxxx的博客 768

Java程序性能优化

一、避免在循环条件使用复杂表达式在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。例子:import java.util.Vector;class CEL {    void method (Vector vector) {        for (int i = 0; i             ; // ...    }

846

不要使用复杂表达式

不要使用复杂表达式 Perl语言的原作者Larry Wall曾经说过,伟大的程序员都有三个优点:懒惰、暴躁和自负。 首先,懒惰:能用3行代码就不用10行 其次,暴躁:能3秒钟完成的任务绝不能容忍1分钟的等待。 最后,自负:写可靠无误的代码 我们需要一个程序从输入的三个数中找出最大的那个数。这个程序对任何会编程的人来说都是小菜一碟,甚至不会编程的人经过10分钟的学习也能搞定。下面是用来解决这个问题...

Gfqwy2021 1916

不要条件判断中执行复杂的语句

除常用方法(如getXxx/isXxx)等外,不要条件判断中执行复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量,以提高可读性。 说明:很多if语句内的逻辑相当复杂,阅读者需要分析条件表达式的最终结果,才能明确什么样的条件执行什么样的语句,那么,如果阅读者分析逻辑表达式错误呢? Negative example:(负面的例子) if ((file.open...

weixin_30311605的博客 5272

Python学习系列之lambda表达式

一、lambda定义与用法 lambda表达式是一行的函数。它们在其他语言中也被称为匿名函数。即,函数没有具体的名称,而用def创建的方法是有名称的。如果你不想在程序中对一个函数使用两次,你也许会想用lambda表达式,它们和普通的函数完全一样。而且当使用函数作为参数的时候,lambda表达式非常有用,可以让代码简单,简洁。 lambda表达式返回的是function类型,说明是一个函数类型。...

answer3lin的博客 6万+

python复杂函数表达_Python:用函数还是用复杂表达式

不要使用复杂表达式Perl语言的原作者Larry Wall曾经说过,伟大的程序员都有三个优点:懒惰、暴躁和自负。乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同的意义。首先,懒惰会促使程序员去写一些省事儿的程序来辅助自己或别人更好的完成工作,这样我们就无需做那些重复和繁琐的劳动;同理能够用3行代码解决的事情,我们也绝不会写出10行代码来。其次,暴躁会让程序员主动的去完成一些你...

weixin_39681171的博客 493

python基础教程】6 表达式

Python表达式是编程中的一个基础且核心概念,它指的是由操作数(如变量、常量或函数调用返回的值)和运算符(如算术运算符、比较运算符、逻辑运算符等)组成的代码片段,这些片段可以被Python解释器计算或评估以产生一个值。

m0_74195174的博客 2417

python复杂函数表达_python应该用函数还是用复杂表达式

不要使用复杂表达式Perl语言的原作者Larry Wall曾经说过,伟大的程序员都有三个优点:懒惰、暴躁和自负。乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同的意义。首先,懒惰会促使程序员去写一些省事儿的程序来辅助自己或别人更好的完成工作,这样我们就无需做那些重复和繁琐的劳动;同理能够用3行代码解决的事情,我们也绝不会写出10行代码来。其次,暴躁会让程序员主动的去完成一些你...

weixin_39834090的博客 159

详解 Python 中的 lambda 表达式

lambda表达式被设计为一种轻量级的匿名函数表示方式,因此只能包含单个表达式而不能包含复杂的语句块。lambda表达式无法像普通函数一样添加文档字符串(docstring),这使得在协作开发或代码维护时,lambda表达式的功能和用法难以说明清楚。lambda表达式是一种匿名函数的简便表示,适用于函数体较短的情况,常与高阶函数结合使用,使代码更为紧凑。lambda表达式适用于简单的映射和过滤操作,例如使用map()和filter()函数。lambda表达式适用于简短的逻辑表达式,使代码更为紧凑。

加百力 的技术博客 3213

python max函数时间复杂度_程序员的思考:用函数还是用复杂表达式

程序员的思考:用函数还是用复杂表达式Perl语言的原作者Larry Wall曾经说过,伟大的程序员都有三个优点:懒惰、暴躁和自负。乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同的意义。首先,懒惰会促使程序员去写一些省事儿的程序来辅助自己或别人更好的完成工作,这样我们就无需做那些重复和繁琐的劳动;同理能够用3行代码解决的事情,我们也绝不会写出10行代码来。其次,暴躁会让程序员主...

weixin_39737368的博客 1850

python lambda表达式详解

@python lambda表达式详解 1、lambda简介 先来看一段代码示例: 第一行是lambda声明,x,y相当于传入的参数,整个函数会返回x+y的值。lambda作为一个表达式,定义了一个匿名函数,上例的代码x,y为入口参数,x+y为函数体。在这里lambda简化了函数定义的书写形式。 python允许用lambda关键字创造匿名函数。匿名是不需要以标准的方式来声明,比如说使用 def...

DDB 5万+

Python正则表达式使用

小练习:用代码实现自定义的replace_practice替换函数,实现代码如下:功能是将字符串中所包含的空格替换为mm def replace_practice(str,a,b,count=None): i=0 #记录替换count次数 n=0 result=[] if count==None: count=len(str) while i<len(str) and len(str)!=0 and n<count:

涤生大数据 1万+

Python笔记:复杂的布尔表达式和正反面写法示例

复杂的布尔表达式 If 语句有时候会使用更加复杂条件布尔表达式。可能包括多个比较运算符、逻辑运算符,甚至包括算式。 if 18.5 &amp;amp;amp;amp;lt;= weight / height**2 &amp;amp;amp;amp;lt; 25: print(&amp;amp;amp;quot;BMI is considered 'normal'&amp;amp;amp;quot;) if is_raining and is_sunny:

Wang的专栏 2846
上一篇: Python开发系列课程(5) - 玩转PyCharm(上)
下一篇: Python开发系列课程(7) - 函数和模块的使用
骆昊的技术专栏
骆昊的技术专栏 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄21年 1万+粉丝 141原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值