【发布时间】:2018-07-24 22:23:42
【问题描述】:
假设我要为下面的代码编写一个文档字符串:
def some_thing_cool(age, name):
better_age = age - 20
cooler_name = name + 'awesome'
bday_list = ['cake', 'balloons']
return bday_list
会是这样吗:
def some_thing_cool(age, name):
"""Something for bday
Args:
age (int) : age of bday person
name (string) : name of bday person
Variable:
better_age (int) : age - 20 for more pleasing age
cooler_name (string) : name + awesome
bday_list (list) : things to remember for bday
Returns:
bday_list (list) : best to return the list
"""
better_age = age - 20
cooler_name = name + 'awesome'
bday_list = ['cake', 'balloons']
return bday_list
或者应该是这样的:
def some_thing_cool(age, name):
"""Something for bday
Args:
age (int) : age of bday person
name (string) : name of bday person
Returns:
bday_list (list) : best to return the list
"""
better_age = age - 20
cooler_name = name + 'awesome'
bday_list = ['cake', 'balloons']
return bday_list
最重要的是,为什么它应该是这样或那样的? (不要考虑文档字符串样式,这在这个问题中并不重要。) 在展示如何编写好的文档字符串时,我可以在网上找到的大多数示例都不包含任何变量,这一直在我脑海中。
【问题讨论】:
-
我无法想象你为什么要记录函数的内部变量。重点是什么?它们是内部的,它们被称为什么或它们做什么与任何人无关。
-
如果你真的需要指定参数和返回值的类型,不要使用像
string这样虚构的错误定义类型,使用你在类型注释中使用的实际名称,例如str。而且,理想情况下,List[str]而不仅仅是list,因为仅仅知道它返回一个 something 的列表并没有多大帮助。 -
更重要的是,只是重复名称和类型作为描述根本没有帮助。我已经知道
age是一个年龄,name是一个名字,而bday_list是“返回列表”......也许告诉我bday_list是“生日派对的装饰品”或其他我不能的东西'否则不看源代码就知道了。 -
补充@DanielRoseman 所说的:如果您确实需要记录内部变量的作用,那么您是在为阅读内部实现的人而不是为人们记录它阅读 API 规范(无论是在此处还是在 Sphinx 生成的网页中)。因此,这应该作为源代码中的内联 cmets。
标签: python python-3.x python-2.7 docstring