社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

利用你所知道的Python技巧写出更加Pythonic的代码

Python程序员 • 7 年前 • 512 次点击  

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。


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


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


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


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


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

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

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

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


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

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

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

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

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

哎嘿!就是这样,完美!


我们能从中学到什么?


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


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


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


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


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


英文原文:https://dbader.org/blog/writing-pythonic-code?utm_source=mybridge&utm_medium=web&utm_campaign=read_more
译者:烟熏把里



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/N1GmoUwVRj
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/8465
 
512 次点击