Python:什么是头文件?

22

我刚接触Python和编程。我在大学里修了一个需要使用Python编写一些基本程序的模块。然而,上一次作业被评价为:

应该有一个标题块,包含文件名、作者名称、创建日期、修改日期和Python版本。

什么是标题块?它只是代码顶部的注释还是程序运行时会打印出来的东西?或者是其他什么东西?


2
可能是Python:什么是常见的标题格式?的重复问题。 - Vyktor
3
不。这可能对原帖作者有用,但这是一个不同的问题。 - user395760
2
可能是Python文件的常见头格式是什么?的重复问题。 - Trevor Boyd Smith
6个回答

29

Python有一种被称为文档字符串的东西(以下是一些关于如何编写Python代码的常规规则:PEP 8),可用三个单引号'''或三个双引号"""来转义,非常适合于多行注释

'''
    File name: test.py
    Author: Peter Test
    Date created: 4/20/2013
    Date last modified: 4/25/2013
    Python Version: 2.7
'''

您也可以在以后(编写模块时)使用特殊变量,这些变量专门用于包含以下信息:

__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"

详细信息请参见此处的答案


9

我的观点

我使用这种格式,因为我正在学习,“这更多是为了我的理智,而不是必要的。”

因为我喜欢一致性。所以,我会像这样开始我的文件。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# =============================================================================
# Created By  : Jeromie Kirchoff
# Created Date: Mon August 18 18:54:00 PDT 2018
# =============================================================================
"""The Module Has Been Build for..."""
# =============================================================================
# Imports
# =============================================================================
from ... import ...
<more code...>

  1. 第一行是Shebang
  2. 我知道大多数Python文件没有必要有Shebang行,但对我来说,它让用户知道我明确为Python3编写了此文件。因为我在我的Mac上同时拥有Python2和Python3。
  3. 第二行是编码,仅供澄清。
  4. 因为我们有时会忘记处理多个来源(API、数据库、电子邮件等)。
  5. 第三行更多的是我自己对最大80个字符的视觉表示。
  6. 我知道“哦,天哪,为什么?!”这使我可以将代码保持在80个字符以内,以便进行视觉表示和可读性。
  7. 第四行和第五行只是我自己的方法,用于跟踪工作组中的作者,这样有助于节省查找GitHub的时间。不相关,只是我为了保持理智而学到的东西。
  8. 第七行是您每个Python文件顶部所需的文档字符串,按Flake8的要求。

再次声明,这只是我的个人喜好。在一个“工作环境”中,你必须赢得每个人的支持来改变实际行为。我可以继续谈论这个问题,但我们都知道这点,至少在工作场所中。

标题块

  • 什么是标题块?
  • 它只是代码顶部的注释,还是程序运行时打印的内容?
  • 还是其他什么东西?

因此,在大学设置的背景下:

标题块或注释

标题注释出现在文件的顶部。这些行通常包括文件名、作者、日期、版本号以及文件用途和内容的描述。对于课堂作业,标题还应包括课程名称、编号、章节、教师和作业编号等信息。

  • 它只是代码顶部的注释,还是程序运行时打印的内容?还是其他什么东西?

嗯,这可能会被你的教授有不同的解释,请展示并询问!

"If you never ask, The answer is ALWAYS No." -> "如果你从不问,答案永远是不。"
# Course: CS108
# Laboratory: A13
# Date: 2018/08/18
# Username: JayRizzo
# Name: Jeromie Kirchoff
# Description: My First Project Program.

如果您正在寻找过度杀戮:

或者使用"模块级别的下划线名称"的Python方式

标准模块级别下划线名称

__author__ = 'Jeromie Kirchoff'
__copyright__ = 'Copyright 2018, Your Project'
__credits__ = ['Jeromie Kirchoff', 'Victoria Mackie']
__license__ = 'MSU'  # Makin' Shi* Up!
__version__ = '1.0.1'
__maintainer__ = 'Jeromie Kirchoff'
__email__ = 'MyGmailUser@gmail.com'
__status__ = 'Prototype'

添加您自己的自定义名称:

__course__ = 'cs108'
__teammates__ = ['Jeromie Kirchoff']
__laboratory__ = 'A13'
__date__ = '2018/08/18'
__username__ = 'JayRizzo'
__description__ = 'My First Project Program.'

如果讲师需要的话,只需添加一些代码即可打印。

print('# ' + '=' * 78)
print('Author: ' + __author__)
print('Teammates: ' + ', '.join(__teammates__))
print('Copyright: ' + __copyright__)
print('Credits: ' + ', '.join(__credits__))
print('License: ' + __license__)
print('Version: ' + __version__)
print('Maintainer: ' + __maintainer__)
print('Email: ' + __email__)
print('Status: ' + __status__)
print('Course: ' + __course__)
print('Laboratory: ' + __laboratory__)
print('Date: ' + __date__)
print('Username: ' + __username__)
print('Description: ' + __description__)
print('# ' + '=' * 78)

最终结果

每次调用程序时,它都会显示列表。

$ python3 custom_header.py
# ==============================================================================
Author: Jeromie Kirchoff
Teammates: Jeromie Kirchoff
Copyright: Copyright 2018, Your Project
Credits: Jeromie Kirchoff, Victoria Mackie
License: MSU
Version: 1.0.1
Maintainer: Jeromie Kirchoff
Email: MyGmailUser@gmail.com
Status: Prototype
Course: CS108
Laboratory: A13
Date: 2018/08/18
Username: JayRizzo
Description: My First Project Program.
# ==============================================================================

注:如果您扩展了程序,请在 init.py 中设置一次,然后您就可以开始了,但是请再次与教授核对。

如果想要脚本,请查看我的github。


4

您的教练希望您向作业源代码的顶部部分添加一些信息,就像这样,因此您将添加注释:

####################################
# File name: ...                   #
# Author: ...                      #
# Submission:                      #
# Instructor:                      #
####################################

2
为什么不是Zoidberg?我的意思是... docstring - Vyktor
我认为这是一个基础的编程入门作业,因此添加通常的注释就足够了,但她肯定应该知道文档字符串。 - Barış Akkurt

4

非常好的讨论-->Python文件的通用头格式是什么?

Python文档字符串应该简明扼要,不应包含修订历史或与当前版本行为无直接关系的任何内容。我还没有看到“man”风格的文档字符串,这也许是一样好事。

一个带有修订历史的花盆(某些修订可能比您的源代码控制版本更早)独立于源代码控制之外,回溯到在纸上阅读代码或通过电子邮件发送的日子。我们并不总是像现在这样互相联系。

使用现代IDE已经不再流行,但可以看到对于较老/较大的高级工作。在一些商店里,签到不是由编码者执行的,尤其是如果代码被“购物出去”。一些登录评论以懒惰、邋遢的方式进行。

因此,它因情况而异,但:

#! /usr/bin/python
#--------------------------------#
# optional flower box  
#--------------------------------#
""" 
Multiple lines of doc if required
"""

import foo
import bar

__metastuff__ = 'some value'

我看到 'meta' 在更高的位置,尤其是在 "pycharm" 的 youtube 推广中。人们喜欢将它放在导入之后,因为它确实是代码,而导入通常会出现在代码之前。我可以想象很容易被带偏。然而,在低级别代码中提供明智和有用的注释比楼上写的任何东西都更有价值。
在现实世界中,只要按照项目中其他人的做法去做,你就不会有问题。通常使用模板或从“原型”复制和粘贴(即抄袭)是很常见的。

3

头部区块只是代码顶部的注释,程序运行时不打印出来。

一个例子可能如下所示:

# File name: test.py
# Author: Peter Test
# Date created: 4/20/2013
# Date last modified: 4/25/2013
# Python Version: 2.7

# Begin code

a = 1
b = 2

c = a + b

print c

0
在这个上下文中,你是正确的。头部块指的是源文件顶部包含所需信息的一组注释,不需要包含任何实际执行操作的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接