我有一个当前返回的方法None或a dict.
result,error = o.apply('grammar')
Run Code Online (Sandbox Code Playgroud)
调用者当前必须检查是否存在两个键来决定返回什么类型的对象.
if 'imperial' in result:
# yay
elif 'west' in result:
# yahoo
else:
# something wrong?
Run Code Online (Sandbox Code Playgroud)
因为结果可以None,我正在考虑返回一个空的dict,所以调用者不需要检查它.你怎么看 ?
为了比较,在re模块中,调用的结果match可以导致None.
p = re.compile('\w+')
m = p.match( 'whatever' )
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,m是一个对象实例.在我的情况下,我将返回一个dict,它应该是空的或有一些条目.
sat*_*esh 19
是的我认为返回一个空的dict(或适用的空列表)比返回None更可取,因为这样可以避免在客户端代码中进行额外的检查.
编辑:添加一些代码示例来详细说明:
def result_none(choice):
mydict = {}
if choice == 'a':
mydict['x'] = 100
mydict['y'] = 1000
return mydict
else:
return None
def result_dict(choice):
mydict = {}
if choice == 'a':
mydict['x'] = 100
mydict['y'] = 1000
return mydict
test_dict = result_dict('b')
if test_dict.get('x'):
print 'Got x'
else:
print 'No x'
test_none = result_none('b')
if test_none.get('x'):
print 'Got x'
else:
print 'No x'
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,check test_none.get(x)会抛出AttributeError,因为result_none方法可能返回None.为了避免这种情况,我必须添加一个额外的检查,并可能将该行重写为:
if test_none is not None and test_none.get('x')如果该方法返回一个空的dict,则根本不需要.如示例所示,检查test_dict.get('x') 工作正常,因为该方法result_dict返回空字典.
我不完全确定这段代码的上下文,但我会说返回None表示存在某种错误并且操作无法完成.返回一个空字典表示成功,但没有任何内容符合添加到字典的标准.
我来自一个完全不同的背景(C++游戏开发),所以请考虑它的价值:
但是出于性能原因,可能很高兴返回None并保存任何开销,尽管很小,但可能涉及创建空字典.我发现,通常情况下,如果您使用的是脚本语言,那么您并不关心该代码的性能.如果您是,您可能不会用所述语言编写该功能,除非出于某些不可避免的原因需要.
| 归档时间: |
|
| 查看次数: |
8174 次 |
| 最近记录: |