如何正确调用其中的函数?
问题描述:
当请求由于授权问题而失败时,我应该从myfunction
调用myfunction
。请参阅下面的代码。如何正确调用其中的函数?
def myfunction(parm1, parm2, parm3, parm4=None):
error_text = None
result = None
response, error_code = do_some_external_call()
if error_code == 401: # auth_error
login()
result, error_text = myfunction(parm1, parm2, parm3, parm4)
return result, error_text # ???
if response:
result = response.result
return result, error_text
我应该在标有???
的行上返回result, error_text
吗?或者只需拨打return
就足够了?
答
你应该要求这个函数,所以它只有一个返回 - 它会更容易理解。除此之外,当然,所有返回语句都必须尊重返回两个对象的函数签名。为什么会有所不同?
答
当您可以使用简单的循环时,不要使用递归。
def myfunction(parm1, parm2, parm3, parm4=None):
while True:
response, error_code = do_some_external_call()
if error_code == 401:
login()
else:
break
return getattr(response, 'result', None), error_code
答
只需直接返回函数就可以了,您可以在REPL中很容易地测试它。这是我能想到的最快捷的例子:
def reccy3(x):
if x <= 1:
return x, 1
return reccy3(x-1)
为您的代码,你似乎没有设置任何地方error_text
,所以我会假设你的意思error_code
。您可以轻松修改以下内容以包含error_text
,但是您正在使用它。
def myfunction(parm1, parm2, parm3, parm4=None):
response, error_code = do_some_external_call()
if error_code == 401: # auth_error
login()
return myfunction(parm1, parm2, parm3, parm4)
if response:
return response.result, None
return None, error_code
*“只要调用'return'就足够了吗?” - - 你试过了吗?发生了什么? – jonrsharpe
也许我们在这里缺少代码,但是您的参数没有事先分配,您的目标是什么?你的问题似乎对我很模糊。 – scharette
@jonrsharpe,是的,我尝试了一些问题,但不确定它们是否与此特定行有关。结果我决定了解它是如何工作的。 –