Python 中除了 lambda 函数能实现一句话程序, 还有什么方式能够实现呢?
引言
我们都知道 python 中使用 lambda 函数能够实现一句话程序,一句话能实现复杂功能,是一件多么炫酷的事情.但也是有利有弊的,至少一句话代码虽然简洁,但可读性不好,毕竟现实中都是多人合作编程,结对编程也是很多人提倡的,所以代码不只是要让机器看懂,同时也要让人读明白.
说到这里也许很多初学者还不知道什么是 lambda 函数,在 Python 中,lambda 函数就是我们使用 lambda 关键字来声明的一个匿名函数,这就是为什么我们将它们称为“lambda 函数”。匿名函数是指没有声明函数名称的函数。尽管它们在语法上看起来不同,lambda 函数的行为方式与使用 def 关键字声明的一般函数相同。lambda 和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。以下是 Python 中 lambda 函数的特点:
lambda 函数可以接受任意数量的参数,但函数只能包含一个表达式。表达式是 lambda 函数执行的一段代码,它可以返回任何值,也可以不返回任何值。lambda 函数可以返回函数对象。从语法上讲,lambda 函数只能有一个表达式。举个例子:
lambda 匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。
普通函数:
lambda 函数:
开发中不太建议使用 lambda 函数;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。使用它的时候要注意场景,我可以将它们用在需要封装特殊的、非重用代码上,避免令我的代码充斥着大量单行函数。
上面只是简单的举例,lambda 还能把更多的语句写成一句话函数,不过 lambda 不是我们今天的重点.我们今天要说的是 Python 的推导式.
推导式又叫解析式,Python 推导式是一种 Python 独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
Python 支持各种数据结构的推导式:
列表(list)推导式
字典(dict)推导式
集合(set)推导式
元组(tuple)推导式
接下来我们通过和普通写法来对比来学习推导式
列表推导式
用一个表达式创建或控制一个有规律列表
列表推导式格式为:
语法解析:
out_exp_res:列表生成元素表达式,可以是有返回值的函数。
for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
if condition:条件语句,可以过滤列表中不符合条件的值。
例子:过滤掉长度小于或等于 3 的字符串列表,并将剩下的转换成大写字母:
推导式写法:
普通写法:
这就是列表推导式,很简洁。上面对比看起来其实与 for 循环写法差不多。但推导式的好处是:不需要像 for 循环那样,先定义一个列表,然后在循环中编写如何把结果放入列表的代码。可以节省不必要的内存开销
字典推导式
快速合并列表为字典或提取字典中目标数据
字典推导式的格式:
例子:使用字符串及其长度创建字典
推导式的写法:
普通写法:
集合推导式
集合有数据去重功能
集合推导式基本格式:
例子:判断不是 hel 的字母并输出:
推导式的写法:
普通写法:
元组推导式
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。
元组推导式格式:
元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。
例子:生成一个包含数字 1~9 的元组:
推导式的写法:
普通写法:
从上面的两种写法可以看出,虽然转成元组结果一样,但是推导式的写法默认返回的是一个生成器对象
总结
对于开发来说,推导式一种更高效更简洁的处理序列方式,但是他也有可读性不好的缺点,所以使用时一定要注意使用场景.在正确的场景使用或许能有事半功倍的效果.
版权声明: 本文为 InfoQ 作者【迷彩】的原创文章。
原文链接:【http://xie.infoq.cn/article/cdb40fb7c4ae7ad186b57a38d】。文章转载请联系作者。
评论