Python的偷懒用法 - 交互式学Python | 莫烦Python

Python的偷懒用法

作者: 莫烦 编辑: 莫烦 2021-06-05

在 Python 中,其实是有很多可以偷懒的方法的。原生的 Python 语言就自带了非常多小技巧,小实用方法。 我经常在日常写代码的时候用到它们。这可以节约我很多写代码的时间。还是回到最开始那一个课程介绍页的内容。 人生苦短,我用 Python 这句话,那既然我们抱着这个目的在学 Python,你势必要学会更加有效的方法,让你在苦短人生中, 比一般 Pythoner 更加出众。

在这一节主要涉及到的功能:

Lambda: 更直接的 Function

在 Python 中,我们肯定会定义功能 Function,或者 method,无论你管它叫什么,它都是一个会执行你任务的功能。

你看,即使是一个简单的 add 功能,我都要写一长串的固定格式才能把它当功能使用。 有没有更简单的方法?答案是肯定的。如果你发现你的情况是:

  1. 我的功能很简单
  2. 调用次数不多(没那么正式的功能)

你就可以用 lambda 来写功能啦。

你看,我一行就能解决的事,为什么要写那么多行呢?不过 lambda 也不能滥用,一定要记得有这么个约定的前提条件。 它不是正式功能,你要临时使用的时候可以用,正式的功能,特别是你要为别人写功能的时候,你写在 lambda 里,大家不会把它当回事的。

一行for能解决的事,干嘛写那么多

你是否有这么一个时候:

  1. 我想要出一个列表,
  2. 然后用 for 循环不断添加列表里的元素。

正常来说,我们通常要这样写,列表才会添加完毕。

但是这样写,对于我来说太麻烦了。不就是要按规律得到一个列表吗?我一行就可以解决呀。

甚至,你还能那这种方法来创造字典

但是这种方法也是有适用场景的,如果你的列表/字典生成逻辑非常复杂,这种一行的 for 就太劳民伤财了,你会为其中的格式纠结死的。 所以这种列表/字典的生成方式只适合 for 内部只有比较简单的运算逻辑的情况。

可以一行判断,何必多行

这里要说的是判断逻辑,那些简单的 if-else 判断,如果写成多行,有时候还挺费力的。比如

你对比下面这种写法,你的生命负担是不是又减轻了~

不过上面这种简写模式,也有一些经验上的偏爱条件。如果你的 if else 逻辑很复杂,比如里面还有 elif 这种逻辑,就不要用一行写。 一行只是为了减少你处理简单情况的时间。如果你在一行里面写了太多逻辑,阅读起来就很困难了。

一行for+判断也行

我们刚刚说了 for 的超简写模式,和 if else 的简写模式,如果上天再给我一个恩惠,我想,它一定会把这两种模式整合起来, 让我的生命得到升华~这不它来了。

在这种情况下,我们通常是处理一种特殊的列表/字典生成方式。

  1. 我要用一行 for 生成一个列表/字典
  2. 对原始数据进行判断,符合要求的生成,不符合的抛弃

如果我们用原始的 for 来写这样的逻辑,将会是下面这样

当你看到下面的写法的时候,将会豁然开朗~

那么字典行吗?

我的生命从此得到了升华~ Yeah。

enumerate 自动加 index

有时候你肯定会苦恼,我想为在 for 里面记个数,到某个数的时候做点特殊处理。我的生命没有得到升华的时候,我肯定会这样写。

这个 count 的存在时不时很费事?还要我手动去累加。要不试试 enumerate

还有更炫酷的,如果我自定义 count 还好,我可以初始化 count 到不同的数值。不急,这点小 case,enumerate 也能应付。

Zip让你同时迭代

我要同时处理两个列表,一个是姓名一个是分数,并把它们做成一个字典,你会怎么做?

这种写法对于我来说,还是比较累赘的。怎么搞?直接上 zip

其实这也就是在 d[n]=s 这一步得到了简化,但是你有没有想过,如果需要同时循环的东西变多了以后,情况就变得复杂很多。我们 zip 还是能简化写法的。

我看见了光~ 生命之光。

reverse & reversed

翻转列表?你会遇到吗?有时候还真有这种需求,比如页面上用户想要按时间正序排列,有时候想要按时间倒叙,这不就是一个最常见的场景吗? 你怎么办?如果我用一些列表技巧,可能这样比较合适

如果你学了今天的内容,上面我们不是提到了一种 for 的续命短模式吗?

这还不是最简单的,最简单的当然是 Python 自带的翻转功能呀。比如下面这三种种都可以。 第一种是自己就地反转。

另一种是可以用在 for 循环里的翻转迭代器,你也可以试试不用在 for 循环中,它会返回什么。

最后一种是要 copy 出一个浅拷贝副本的反转

一个反转都有这么多种不同的方式,真不愧是 Python。

总结

有了这些 handly 的方法,我的秃头病也要治好了,用 Python 无时无刻都体现出生命之光的本色。印证了生命苦短,我用 Python 这句话。


降低知识传递的门槛

莫烦很常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 通过 【赞助莫烦】 能让我感到认同,我也更有理由坚持下去。