Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

我经常在了解到Python的一些新特性和用法时犯一个错误... 我这篇文章讲的就是让你如何避免这个坑的同时也进一步了解enumerate这个函数。

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

当我学到一个Python新技巧的时候我总会马上感觉到这东西是对我有帮助的,这种感觉差不多就像是我内心很确定地知道它有用处。然而当我坐下来仔细思量一番,我又很难立马找到一个场景去真正的使用这个新技巧。

所以这里的问题就是,你如何将你学到,了解到的新的函数或者模块写成最Pythonic的代码,然后让code reviewer给你点一个大大的赞呢?

在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

有一天我的博客文章订阅者保罗问了我一个问题,这个问题是关于我的另外一篇文章中关于Python的enumerate函数的部分的。

昨天我碰到了一个场景需要我写出一个将enumerate的下标变成哈希表中的值,迭代的元素变成键的字典(差不多类似于{'Bob': 0}这种情况). 我当时是用的列表长度结合zip函数的方式通过字典解析式完成的。

有其他更加Pythonic的方式去解决这个问题吗?

为了让你们更了解当时的具体情况,下面用代码告诉你们保罗究竟想干啥:

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

其实说白了就是从输入的数组里得到一个以元素->元素下标为格式的键值对的字典,这样就可以通过元素本身去查找它在数组中的位置。

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

下面是保罗实现这个需求的方法:

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

看起来还行是吧,不过保罗觉得应该有办法写的更简洁。这跟我经常遇到的情况几乎一模一样。保罗的直觉意识到有办法利用enumerate函数让他的代码更加Pythonic。但是他应该如何实现他这个想法呢?我首先想到的是我们可以通过避免字典解析来缩短一点代码:

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

稍微简洁了一点(视觉上更清晰了一些),不过正像保罗一样,我对range(len(...))这种结构还是不太满意的。让我们尝试一下使用enumerate():

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

好了,所以这里我可以利用enumerate对数组中的元素和下标进行一一配对。让我们把上面这个表达转换成字典:

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

我们已经非常接近最后答案了!上面这种表达可以说基本上就是我们最终想要的结果,唯一不同在于键值的位置反了。所以我们能如何将键值对反过来呢?让我们从新回到字典解析的方法:

Python那些事——用你所知道的Python技巧写出更加Pythonic的代码

哎嘿!就是这样,完美!

我们能从中学到什么?

其实通过上面这样的一个思考过程,在一步步推导和咀嚼后,对于你的进步是很有帮助的。

你看,从始至终保罗的思维都是对的。确实是有通过利用enumerate函数的方法来使代码更简洁的。只是说这种方法的具体原理稍微有点不清晰。

所以当你发现自己也身处这种情况时,请沉下去探索吧!

Python在处理这种类似随手一测的小问题时是非常优秀的语言。就像我在回复保罗的邮件时,我做的第一件事就是打开Python解释器然后自己做一些小实验。

你很难在类似C++这样的编译语言中做到这样的事。这也是Python中你最应该着重利用的特性之一。做到这些,那声"漂亮"就是为你的代码而欢呼的。

猜你喜欢

转载自blog.csdn.net/qq_41769259/article/details/79522518