我正在寻找有关何时适当和/或希望从Python函数返回None而不是空列表或零长度字符串的良好约定的指导?
例如,现在,我正在编写一个Python类来与GIT接口(目前,我们不必担心为什么必须从头开始编写),并且有几个函数返回值。以一个名为“get_tags”的函数为例。通常,它返回一个列表,但是,如果repo中还没有标签,最好返回空列表还是无?
我意识到会有多个观点,我想我为什么要问这个问题。我确信两者都有专业和有利,这就是我正在寻找的信息。
对此有一般性约定吗?
答案 0 :(得分:1)
get_tags
函数返回的数据最常见的用法是什么?我会假设你在某个时候想要迭代它。请考虑以下事项:
# returning a list
for tag in get_tags():
print tag
# returning None
tags = get_tags()
if tags is not None:
for tag in tags:
print tag
在上面的示例中,返回None
比返回空列表更加繁琐且可读性更低,因为在尝试迭代之前必须检查tags
是否是有效的迭代。空列表是有效的可迭代,不需要检查。字典和元组是相似的。
对于字符串,我发现自己正在进行字符串操作或搜索最常返回字符串的结果:
import re
description = commit.get_description().lower()
# get all JIRA issues
for project_name, issue_id in re.findall(r'(\w+)-(\d+)', s):
jira.close_issue(project_name, issue_id)
# vs.
description = commit.get_description()
if description:
description = description.lower()
for project_name, issue_id in re.findall(r'(\w+)-(\d+)', s):
jira.close_issue(project_name, issue_id)
在存在测试的情况下,为类的实例返回None
是有意义的。
# using xml.etree.ElementTree as an example,
# the .find() method of an XML element will return None if
# an Element is not found
my_tag = root.find('my-tag')
if my_tag is not None:
do_something_with_my_tag(my_tag)
返回值应该实现所有正常使用的预期方法,即duck typing(当然,除了None
通常更适合实例的最后一种情况之外)。
答案 1 :(得分:0)
我会说如果函数应该返回一个对象,那么返回None。如果你的函数应该返回一个“native”类型(string,int,list,dict等等),那么返回“”,0,[],{}等......