Python中除了lambda函数能实现一句话程序,还有什么方式能够实现呢?

简介: 我们都知道python中使用lambda函数能够实现一句话程序,一句话能实现复杂功能,是一件多么炫酷的事情.但也是有利有弊的,至少一句话代码虽然简洁,但可读性不好,毕竟现实中都是多人合作编程,结对编程也是很多人提倡的,所以代码不只是要让机器看懂,同时也要让人读明白. 说到这里也许很多初学者还不知道什么是lambda函数,在Python中,lambda函数就是我们使用lambda关键字来声明的一个匿名函数,这就是为什么我们将它们称为“lambda函数”。匿名函数是指没有声明函数名称的函数。尽管它们在语法上看起来不同,lambda函数的行为方式与使用def关键字声明的一般函数相同。lambda和

引言


我们都知道python中使用lambda函数能够实现一句话程序,一句话能实现复杂功能,是一件多么炫酷的事情.但也是有利有弊的,至少一句话代码虽然简洁,但可读性不好,毕竟现实中都是多人合作编程,结对编程也是很多人提倡的,所以代码不只是要让机器看懂,同时也要让人读明白.


说到这里也许很多初学者还不知道什么是lambda函数,在Python中,lambda函数就是我们使用lambda关键字来声明的一个匿名函数,这就是为什么我们将它们称为“lambda函数”。匿名函数是指没有声明函数名称的函数。尽管它们在语法上看起来不同,lambda函数的行为方式与使用def关键字声明的一般函数相同。lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。以下是Python中 lambda函数的特点:


lambda函数可以接受任意数量的参数,但函数只能包含一个表达式。表达式是lambda函数执行的一段代码,它可以返回任何值,也可以不返回任何值。lambda函数可以返回函数对象。从语法上讲,lambda函数只能有一个表达式。举个例子:

lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开冒号右边的为表达式


普通函数:


deff(x):
returnx+2printf(4)

lambda函数:

g=lambdax : x+2printg(4)

开发中不太建议使用lambda函数;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。使用它的时候要注意场景,我可以将它们用在需要封装特殊的、非重用代码上,避免令我的代码充斥着大量单行函数。

上面只是简单的举例,lambda还能把更多的语句写成一句话函数,不过lambda不是我们今天的重点.我们今天要说的是Python的推导式.

推导式又叫解析式,Python 推导式是一种Python独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。

Python 支持各种数据结构的推导式:

  1. 列表(list)推导式
  2. 字典(dict)推导式
  3. 集合(set)推导式
  4. 元组(tuple)推导式

接下来我们通过和普通写法来对比来学习推导式

列表推导式

用一个表达式创建或控制一个有规律列表

列表推导式格式为:

[表达式for变量in列表] 
[out_exp_resforout_expininput_list]
或者[表达式for变量in列表if条件]
[out_exp_resforout_expininput_listifcondition]


语法解析:

  1. out_exp_res:列表生成元素表达式,可以是有返回值的函数。
  2. for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
  3. if condition:条件语句,可以过滤列表中不符合条件的值。


例子:过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母:

推导式写法:


names= ['Bob','Tom','alice','Jerry','Wendy','Smith']
new_names= [name.upper()fornameinnamesiflen(name)>3]
print(new_names)

普通写法:

new_names2= []
fornameinnames:
iflen(name) >3:
new_names2.append(name.upper())
print(new_names2)

这就是列表推导式,很简洁。上面对比看起来其实与for循环写法差不多。但推导式的好处是:不需要像for循环那样,先定义一个列表,然后在循环中编写如何把结果放入列表的代码。可以节省不必要的内存开销


字典推导式


快速合并列表为字典或提取字典中目标数据

字典推导式的格式:

{ key_expr: value_exprforvalueincollection }
{ key_expr: value_exprforvalueincollectionifcondition }


例子:使用字符串及其长度创建字典

推导式的写法:

listdemo= ['Zhangsan','Lisi', 'Wangwu']
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对newdict= {key:len(key) forkeyinlistdemo}
print(newdict)
#结果:'Zhangsan': 8, 'Lisi': 4, 'Wangwu': 6}

普通写法:

listdemo= ['Zhangsan','Lisi', 'Wangwu']
newdict2= {}
forkeyinlistdemo:
newdict2[key] =len(key)
print(newdict2)

集合推导式

集合有数据去重功能

集合推导式基本格式:

{ expressionforiteminSequence }
{ expressionforiteminSequenceifconditional }

例子:判断不是 hel 的字母并输出:

推导式的写法:

seta= {xforxin'helracheladhelbrheahl'ifxnotin'hel'}
print(seta)
#结果:{'d', 'r', 'b', 'c', 'a'}

普通写法:

seta2=set()
forxin'helracheladhelbrheahl':
ifxnotin'hel':
seta2.add(x)
print(seta2)

元组推导式

元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。

元组推导式格式:

(expressionforiteminSequence )
(expressionforiteminSequenceifconditional )

元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。

例子:生成一个包含数字 1~9 的元组:

推导式的写法:

a= (xforxinrange(1,10))
print(a) #结果:<generator object <genexpr> at 0x0000000002606BA0>print(tuple(ta)) #结果:(1, 2, 3, 4, 5, 6, 7, 8, 9)

普通写法:

ta2=tuple()
forxinrange(1,10):
ta2= (ta2+ (x,))
print(ta2)#结果:(1, 2, 3, 4, 5, 6, 7, 8, 9)

从上面的两种写法可以看出,虽然转成元组结果一样,但是推导式的写法默认返回的是一个生成器对象


总结


对于开发来说,推导式一种更高效更简洁的处理序列方式,但是他也有可读性不好的缺点,所以使用时一定要注意使用场景.在正确的场景使用或许能有事半功倍的效果.

目录
相关文章
|
5天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
1月前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
66 0
|
5天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
7天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
29天前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
30天前
|
存储 数据安全/隐私保护 索引
|
17天前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
44 3
|
19天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
20 3
|
20天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
22天前
|
存储 人工智能 数据挖掘
Python编程入门:构建你的第一个程序
【10月更文挑战第22天】编程,这个听起来高深莫测的词汇,实际上就像搭积木一样简单有趣。本文将带你走进Python的世界,用最浅显的语言和实例,让你轻松掌握编写第一个Python程序的方法。无论你是编程新手还是希望了解Python的爱好者,这篇文章都将是你的理想起点。让我们一起开始这段奇妙的编程之旅吧!
20 3