建议2---编写pythonic代码
(1)要避免劣化代码
1)避免只用大小写来区分不同的对象。如a是一个数值类型变量,A是String类型,虽在编码过程容易区分二者的含义,但这样做毫无益处,它不会给其他阅读代码的人带来多少便利。
2)避免使用容易引起混淆的名称。如重复使用已经存在于上下文的变量来表示不同的类型;误用了内建名称来表示其他含义的名称而使之在当前命名空间被屏蔽;没有使用新建的数据类型的情况下使用类似于element、list、dict等作为变量名;使用字母小写o容易与1 混淆,1与字母L的小写。因此推荐变量名与要解决的问题域一致。有如下两个实例:
#示例1
def funA(list,num):
for element in list:
if num == element:
return True
else:
return Flase
#示例2
def find_num(searchlist,num):
for listValue in searchlist:
if num == listValue:
return True
else:
return False
3)不用害怕过长的变量名。为了使得程序更易理解和阅读,有的时候变量名是必要的。不要为了少写几个字母而过分缩写。下例是一个用来保存用户信息的字典结构,变量名person_info比pi的可读性要强得多。
>>> person_info = {'name':'John','IDCard':''}
(2)深入认识Python有助于编写Pythonic代码
可以从以下几个方面入手:
1)全面掌握Python提供给我们的所有特性,包括语言特性和库特性。其中最好的学习方式应该是通读官方手册的Language Reference和Library Reference。
2)深入学习业界公认的比较Pythonic的代码,如Flask、gevent和requests等。以requests这个通过HTTP(HTTPS)协议获取网络资源的程序库为例,要获取带有Basic Auth的网络资源时,代码如下:
import requests
r = requests.get('https://api.github.com',auth=('user','pass'))
print(r.status_code)
print(r.headers[content-type])
而使用Python标准库httplib2时,代码就非常复杂,程序员需要了解相当多的关于HTTP协议和Basic Auth的知识才能编程。
import urllib2
gh_url = 'https://api.github.com'
req = urllib2.Request(gh_url)
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None,gh_url,'user','pass')
auth_manager =urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)
urllib2.install_opener(opener)
handler = urllib2.urlopen(req)
print(handler.getcode())
print(handler.headers.getheader('content-type'))
最后,除了修炼内功外,也可以尝试利用工具达到事半功倍的效果。接下介绍风格检查程序PEP8。其实一开始PEP8是一篇关于Python编码风格的指南,它提出了保持代码一致性的细节要求。它至少包括了代码布局、注释、命名规范等方面的要求。比如对代码的换行,不好的风格如下:
if foo == 'blah': do_blah_thing()
do_one();do_two();do_three()
而Pythonic的风格是这样的:
if foo =='blah':
do_blah_thing()
do_one()
do_two()
do_three()
如果“人肉”检查代码是否符合PEP8规范,则比较困难,而容易跟同僚引发争论,所以有人开发了一个应用程序来进行检测,那就是PEP8应用程序。它是使用Python开发的,安装它很容易。
$ pip install -U pep8
在自己的shell中执行这一命令就可以安装成功了(首先安装pip),然后即可用它检测自己的代码。
$ pep8 --first test.py
值得注意的是,PEP8不是唯一的编程规范,同样PEP8也不是唯一的风格检测程序,类似的应用还有Pychecker、Pylint、Pyflakes等。
建议2---编写pythonic代码的更多相关文章
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...
- VsCode中使用Emmet神器快速编写HTML代码
一.Emmet简述 Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个工具. 在前端开发的过程中,一大部分的工作是写 HTML.CSS 代码.特别是手动编写 HTML ...
- 建议1---理解Pythonic的概念
对于Pythonic的概念,众人都有自己的看法,但大家心中都认同一个更具体的指南,即Tim Peters的<The Zen of Python>.在这一篇充满禅意的诗篇中,有几点非常深入人 ...
- JUnit编写单元测试代码注意点小结
用eclipse编写单元测试的时候,可以直接选中某个类,然后右键new新疆一个junit case,界面如下图1所示: 图1:新建test case 选 择图1中的JUnit Test Case,然后 ...
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!
原文地址 迁移到:http://www.bdata-cap.com/newsinfo/1741515.html 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和f ...
- [转]通过Visual Studio为Linux编写C++代码
Build 2016大会上Microsoft首次公布的Visual Studio 2015扩展提供了在VS2015中编写C++代码,随后通过Linux/UNIX计算机进行编译和执行的能力.这种想法非常 ...
- 基于CkEditor实现.net在线开发之路(2)编写C#代码,怎么调用它。
上一章简约的介绍了CkEditor编辑器,可以编辑js逻辑代码,css,html,C#代码,这章我根据实际例子,讲解怎么编写C#代码和怎么调用它. 大家都还记得刚刚接触程序编时的hello Word吧 ...
- 解决VS2012编写JQuery代码不能智能提示的问题(其他js库的代码提示设置估计类似)
VS默认设置下编写jQuery代码是这样的: 解决办法: 1.在项目的"管理NuGet程序包"中安装JQuery: 2.打开:工具 -> 选项 -> 文本编辑器 -&g ...
- JNI技术基础(2)——从零开始编写JNI代码
书接上文: <JNI技术基础(1)——从零开始编写JNI代码> 2.编译源程序HelloWorld.java并生成HelloWorld.class 3.生成头文件HelloWorld.h ...
随机推荐
- nosql:文件存储和sql数据库存储形式之外的存储系统都是nosql
为了设计一个比较好的磁盘缓存,我调查了大量的开源库,包括 TMDiskCache.PINDiskCache.SDWebImage.FastImageCache 等,也调查了一些闭源的实现,包括 NSU ...
- 设置ansible与windows连通性
1.确认powershell的版本,必须是3.0以上 $PSVersionTable.PSVersion 2.确认winrm是否开启命令:winrm quickconfig 3.在windows配置w ...
- centos7下kubernetes(2。kubernetes---start,重要概念)
Cluster cluster是计算,存储和网络资源的集合,kubernetes是利用这些资源运行各种基于容器的应用 Master Master是cluster的大脑,他的主要职责是调度,即决定应用在 ...
- P2440 木材加工(二分+贪心)
思路:这里就要看往那边贪心了,因为解决的是最大值最小化,最小值最大化.也就是说当满足大于等于c时,l=mid+1这样的二分得到的就是在所有满足条件函数下的最右端. #include<iostre ...
- How to get Pycharm
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如:代码跳转.智能提示.自动完成.单元测试.版本控制.此外,该IDE提供了一些高级功能, ...
- ActiveMQ的两种消息模式,主题、队列
1.开发的模式流程如下: 2.队列模式Queue 如果生产者产生了100条消息,那么两个消费同时在的话,会分工合作来接收这100条消息.就是每个消费者接收到50条来处理. 3.主题模式topic 如果 ...
- 深度学习框架PyTorch一书的学习-第四章-神经网络工具箱nn
参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 本章介绍的nn模块是构建与autogr ...
- DataGuard切换(主库为Rac+备库为Rac)
http://blog.itpub.net/29477587/viewspace-1331121/ 前段时间做了一次主备库的切换,大体写下操作步骤和记录,分享下. 环境: db v ...
- Android测试(二):Android测试基础
原文地址:https://developer.android.com/training/testing/fundamentals.html 用户在不同的级别上与你的应用产生交互.从按下按钮到将信息下载 ...
- ASP.NET Core如何使用WSFederation身份认证集成ADFS
如果要在ASP.NET Core项目中使用WSFederation身份认证,首先需要在项目中引入NuGet包: Microsoft.AspNetCore.Authentication.WsFedera ...