我碰到一个关于Python编码规范文件在Python源文件下面的头格式:
#!/usr/bin/env python
"""Foobar.py: Description of what foobar does."""
__author__ = "Barack Obama"
__copyright__ = "Copyright 2009, Planet Earth"
这是在Python世界头的标准格式? 我可以把其他什么领域/信息的标题? Python的大师们分享你的好Python源标题中的指南:-)
它的所有元数据Foobar
模块。
第一个是docstring
模块,即在已经解释了彼得的回答 。
如何整理我的模块(源文件)? (归档)
每个文件的第一行是768,16 #!/usr/bin/env python
。 这使得它能够运行该文件作为脚本调用隐含的解释,例如,在一个CGI上下文。
接下来应该是一个描述文档字符串。 如果描述很长,第一行应该是一个简短的总结,使自身的意识,以新行从其余部分分离。
所有的代码,包括导入语句,应遵循的文档字符串。 否则,文档字符串将不会被解释的认可,你将不能访问它在交互会话(即通过obj.__doc__
),或产生与自动化工具文档时。
导入内置模块首位,其次是第三方模块,其次是任何改变的路径和您自己的模块。 特别是,添加到您的模块的路径和名称都可能迅速改变:他们留在一个地方,使他们更容易找到。
接下来应该是作者信息。 这些信息应符合下列格式:
__author__ = "Rob Knight, Gavin Huttley, and Peter Maxwell" __copyright__ = "Copyright 2007, The Cogent Project" __credits__ = ["Rob Knight", "Peter Maxwell", "Gavin Huttley", "Matthew Wakefield"] __license__ = "GPL" __version__ = "1.0.1" __maintainer__ = "Rob Knight" __email__ = "rob@spot.colorado.edu" __status__ = "Production"
状态通常应该是“原型”,“发展”的一个,或“生产”。 __maintainer__
应该是谁将会修复漏洞,并加以改进,如果进口的人。 __credits__
不同于__author__
在__credits__
包括谁报告bug修复,提出建议等,但实际上并没有写代码的人。
在这里你有更多的信息,上市__author__
, __authors__
, __contact__
, __copyright__
, __license__
, __deprecated__
, __date__
和__version__
作为公认的元数据。
我非常赞成最小的文件头,我的意思只是:
- 该hashbang(
#!
行),如果这是一个可执行的脚本 - 模块文档字符串
- 进口方面,在标准的分组方式,例如:
import os # standard library
import sys
import requests # 3rd party packages
import mypackage.mymodule # local source
import mypackage.myothermodule
即。 三组进口,它们之间有一个空行。 在每组中,进口量进行排序。 最后一组,从本地源的进口,可以是如图所示的绝对进口,或明确的相对进口。
一切是时间,视觉空间的浪费,而且是积极的误导。
如果您有法律声明或许可信息,它进入一个单独的文件。 它不需要感染每一个源代码文件。 您的版权应该是这一部分。 人们应该能够找到它在你的LICENSE
文件,而不是随机的源代码。
元数据,如作者和日期已经被你的源代码管理维护。 有没有必要添加的文件本身在同一个信息的详细的少,错误的,和出的最新版本。
我不相信有任何其他的数据,每个人都需要投入所有的源文件。 你可能有一些特殊要求这样做,但这样的事情申请,根据定义,只有你。 他们在“推荐给大家一般头”的地方。
以上这些问题的答案是真正完整的,但如果你想有一个快速和肮脏的头copy'n膏,使用:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Module documentation goes here
and here
and ...
"""
为什么这是一个很好的一个:
- 第一行是* nix的用户。 它会选择在用户路径中的Python解释器,所以会自动选择用户所偏爱的解释。
- 第二个是该文件的编码。 如今每个文件必须有相关的编码。 UTF-8将工作无处不在。 只是传统的项目将使用其他的编码。
- 而一个非常简单的文档。 它可以填补多行。
参见: https://www.python.org/dev/peps/pep-0263/
如果你只是在每个文件中写一个类,你甚至不需要的文件(它会去的类文档里面)。
另请参见PEP 263 ,如果您使用非ASCII字符集
抽象
此PEP建议引入一个语法来声明一个Python源文件的编码。 然后该编码信息被用于由Python解析器来解释使用给定的编码的文件。 最值得注意的是这增强在源代码中的Unicode文本的解释,使得它可以编写例如,使用UTF-8的Unicode文字直接在支持Unicode的编辑器。
问题
在Python 2.1,Unicode的文字只能使用Latin-1的基础编码“Unicode的逃生”写入。 这使得编程环境相当不友好谁住Python用户和工作在非拉丁字母语言环境等许多亚洲国家。 程序员可以使用最喜欢的编码写8位的字符串,但被绑定到“Unicode的逃逸”编码的Unicode文本。
建议的解决方案
我建议使用一个特殊的注释在文件的顶部声明编码,使Python源代码编码可见光和多变的每个源文件的基础。
为了使Python知道这个编码声明的一些观念的改变是必要相对于Python源代码数据的处理的。
定义编码
Python会默认如果没有其他编码提示是给ASCII为标准编码。
以限定源码编码,一个魔法注释必须被放置到源文件或者作为该文件中的第一或第二行,比如:
# coding=<encoding name>
或(使用由常用的编辑器识别的格式)
#!/usr/bin/python # -*- coding: <encoding name> -*-
要么
#!/usr/bin/python # vim: set fileencoding=<encoding name> :
...