Eli*_*any 13 python tuples return
假设如下:
def MyFunc(a):
if a < 0:
return None
return (a+1, a+2, a+3)
v1, v2, v3 = MyFunc()
# Bad ofcourse, if the result was None
Run Code Online (Sandbox Code Playgroud)
定义一个返回元组的函数的最佳方法是什么,但是可以很好地调用它.目前,我可以这样做:
r = MyFunc()
if r:
v1, v2, v3 = r
else:
# bad!!
pass
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个是我必须使用单个变量然后解压缩它.
另一个解决方案是我可以让函数返回一个充满Nones的元组,这样调用者可以很好地解压....
任何人都可以建议更好的设计?
Ski*_*ick 12
如何养一个ArgumentError?然后你可以try调用它,并在参数错误时处理异常.
所以,像:
try:
v1, v2, v3 = MyFunc()
except ArgumentError:
#deal with it
Run Code Online (Sandbox Code Playgroud)
另外,请参阅katrielalex的使用ArgumentError子类的答案.
rec*_*ive 10
这应该很好地工作:
v1, v2, v3 = MyFunc() or (None, None, None)
Run Code Online (Sandbox Code Playgroud)
当MyFunc()返回一个元组时,它将被解压缩,否则它将被替换为3元组None.
recursive拥有真正优雅的Pythonic解决方案.但是:你为什么要回来None?Python有一种处理错误的方法,那就是引发异常:
class AIsTooSmallError( ArgumentError ): pass
Run Code Online (Sandbox Code Playgroud)
然后
raise AIsTooSmallError( "a must be positive." )
Run Code Online (Sandbox Code Playgroud)
更好的原因是返回一个值表示您已完成处理并正在传回您的答案.如果你做了一些处理,这很好,但如果你马上回来就很傻None.
| 归档时间: |
|
| 查看次数: |
7775 次 |
| 最近记录: |