为何编码规范每行代码不超过80个字符是合理的
也许在Python编码风格指导(PEP8)中最有争议的一部分要数每行代码不超过80个字符的限制。没错,实际上是79个字符,但我使用80个字符,这个大概数,它是给程序员的一个参考值。
编辑器
也许在Python编码风格指导(PEP8)中最有争议的一部分要数每行代码不超过80个字符的限制。没错,实际上是79个字符,但我使用80个字符,这个大概数,它是给程序员的一个参考值。
![古老的VT100终端](https://dn-linuxcn.qbox.me/data/attachment/album/201304/15/214150183h41w8kg9zgghr.jpg)
古老的VT100终端
现在很多软件公司采用的编码规范基本是PEP8,但每行80个字符的限制除外。GitHub上的项目,大多数都遵循PEP8规范(这一点似乎达到了高度的统一),但遵守80个字符限制的很少。在一些有明确规定的规范标准中,这个限制可能会增加(100或120),甚至完全删除。这样做常长见的理由是:我们已经不是使用VT100终端编程的年代了,我们有了更大,更高分辨率的屏幕。这是事实,但我发现,在Python编码中采用这个80个字符的规范,配合空格的使用,这会让我们的代码更急凑,更可读。
有一点你可以看出,在自然情况下,Python语句的长度一般会占大概35-60个字符(不包括缩进)。更长的语句很少见。如果突然有一个句子比其它的要长很多,会显得很突兀,不好看。同样,使用强制性的空格来增加行宽能够从视觉上帮助你优化减少嵌套循环的层数,一般的建议是重构代码不要让缩进多于4层。
例如,把下面这个:
def search(directory, file_pattern, path_match, follow_symlinks=True, output=True, colored=True): Search the files matching the pattern. The files will be returned, and can be optionally printed pattern = re.compile(file_pattern) results = [] for root, sub_folders, files in os.walk(directory, followlinks=follow_symlinks): # Ignore hidden directories if /. in root: continue # Search in files and subfolders for filename in files + sub_folders: full_filename = os.path.join(root, filename) to_match = full_filename if path_match else filename match = re.search(pattern, to_match) if match: # Split the match to be able to colorize it # prefix, matched_pattern, sufix smatch = [to_match[:match.start()], to_match[match.start(): match.end()], to_match[match.end():]] if not path_match: # Add the fullpath to the prefix smatch[0] = os.path.join(root, smatch[0]) if output: print_match(smatch, colored) results.append(full_filename) return results
和这个比较:
def search(directory, file_pattern, path_match, follow_symlinks=True, output=True, colored=True): Search the files matching the pattern. The files will be returned, and can be optionally printed pattern = re.compile(file_pattern) results = [] for root, sub_folders, files in os.walk(directory, followlinks=follow_symlinks): # Ignore hidden directories if /. in root: continue # Search in files and subfolders for filename in files + sub_folders: full_filename = os.path.join(root, filename) to_match = full_filename if path_match else filename match = re.search(pattern, to_match) if match: # Split the match to be able to colorize it # prefix, matched_pattern, sufix smatch = [to_match[:match.start()], to_match[match.start(): match.end()], to_match[match.end():]] if not path_match: # Add the fullpath to the prefix smatch[0] = os.path.join(root, smatch[0]) if output: print_match(smatch, colored) results.append(full_filename) return results
在第一段代码里会出现滚动条,但即使是没有出现滚动条,这代码表现的也不美观,视觉上不平衡。第二段代码看起来更好,更容易阅读。
另外重要的一点是,我可以在屏幕上显示更多的东西。很多时候我们都需要屏幕上同时看一个文件的多个地方,或多个文件的内容。我喜欢的实现这个目的的方法是让它们按列排列。如果整个文件有80个宽度的限制,代码会有一个很好的呈现,我不用担心代码在编辑器里会否自动折行,不用去麻烦配置编辑器。如果我需要使用vim在命令行里快速编辑一个文件,就不用担心文件的宽度。能专注于代码。
![竖行排列显示](https://dn-linuxcn.qbox.me/data/attachment/album/201304/15/214151fclciiloziotoe4o.jpg)
竖行排列显示
唯一有问题的是使用Django的时候。当使用Django框架,你需要使用很多像这样的调用:
ThisIsMyModel.objects.find(field1=value1, field2=value2).count()
在有缩进的代码里,一个‘最小’的model函数调用都会让你没有多少剩余空间…但我仍然坚持相同的原则,尽量让代码表现的清晰可读,但这比起其它Python代码来要难的多。
所以,即使这个限制最初的愿望已经和现在完全不符合,我仍然觉得这个限制能帮助我写出更可读紧凑的代码。我是一个要求“可读性”的狂热分子,我甚至认为代码的可读性是一个最重要的需要考虑的方面,程序员应该在任何时候都铭记这一点。
原文发布时间为:2013-04-15
本文来自云栖社区合作伙伴“Linux中国”
去掉多余的空格---输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。输入格式 输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。 共一行,包含一个字符串。 输出去掉多余空格后的字符串,占一行。 输入字符串的长度不超过 200200。 保证输入字符串的开头和结尾没有空格。
第四题:任一个英文的纯文本文件,统计其中的单词出现的个数。 一、首先获取纯英文的文本,这里以获取 Python之禅 为例,见代码如下 # -*- coding: utf-8 -*- import sys origin = sys.stdout#标准输出 f =open( file.txt , w ) sys.stdout = f # =================================== print Start of program # 你的程序放到这里,过程中所有print到屏幕的内容都同时保存在file.txt里面了。
相关文章
- 对SFBC空频编码和FSTD-SFBC频率切换分集与空频编码的MIMO系统误码率matlab仿真
- 【方块编码】基于matlab的图像方块编码仿真
- JavaScript进阶系列03,通过硬编码、工厂模式、构造函数创建JavaScript对象
- 常见编码GBK、GB2312、UTF-8、ISO-8859-1的区别
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南4:确保安全敏感方法被调用时参数经过验证
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南7:防止代码注入
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南17:最小化特权代码
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南18:不要将使用降低安全性检查的方法暴露给不可信代码
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南21:不要让不可信代码误用回调方法的特权
- 《Java编码指南:编写安全可靠程序的75条建议(英文版)》—— 2.4 在变量中存储信息
- PLM调研(分类编码)
- Python 代码库之unicode 编码与字符串之间相互转换
- Python实现图片的base64编码
- netty系列之:自定义编码和解码器要注意的问题
- java安全编码指南之:堆污染Heap pollution
- 小师妹学JavaIO之:文件编码和字符集Unicode
- 字符串js编码转换成实体html编码的方法(防范XSS攻击)
- Python学习---JSON补充内容[中文编码 + dumps解析]
- 华为OD机试 - TLV 编码(Python) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 - 整数编码(Java) | 机试题+算法思路+考点+代码解析 【2023】
- java读取文件并获得文件编码,转换为指定编码的工具类代码
- Web 报错 之 WebStorm vue文件编码格式报红(编码格式错误提示)的简单处理
- 把windows系统的默认编码改成UTF-8
- 电气开发人员切勿使用硬编码密码
- 这个工具可以清除软件代码项目中的硬编码密钥
- url编码 及 js中url编码的api和应用