在python 3中,我写了类似下面的内容,感到很惊讶/很高兴它有用,并想知道这是不是很好的形式,或者是否有更好的写作方式:
def func_name(myargument):
if myargument.check():
return "something meaningful"
try:
return myargument.somemethod()
except myError:
print("some helpful message")
raise
答案 0 :(得分:1)
您的示例将使用显式返回或抛出异常 - 它永远不会到达函数的末尾 - 因此我不确定您的问题是否符合您的具体示例。
除此之外,我通常会尝试避免依赖于隐式return None
的函数;它会像其他语言一样使代码审阅者感到困惑,缺乏回报是void
函数。
请记住,一般来说,阅读代码比编写代码要多得多,所以在六个月的时间内将其编写为可读...
答案 1 :(得分:1)
没有结束回报是好的。
虽然我很困惑你为什么"检查" myargugument两次基本上......一次在check()中,一次尝试。
你能简化为:
try:
return myargument.somemethod()
except myError as e:
print("some helpful message")
raise
else:
return "something meaningful"
基于.check()是一种廉价的旗帜检查,您可能还想考虑使用Python"三元运算符":
try:
return "something meaningful" if myargument.check() else myargument.somemethod()
except myError as e:
print("some helpful message")
raise
答案 2 :(得分:1)
最接近官方" Pythonic"指导是PEP 8。它说:
在回复陈述中保持一致。 a中的所有返回语句 函数应该返回一个表达式,或者它们都不应该。如果有的话 return语句返回一个表达式,任何返回语句都没有 返回的值应该明确地将其声明为返回None,和 显式return语句应该出现在函数的末尾 (如果可以到达的话)。
在这种特殊情况下,我认为你所拥有的很好,因为函数的结尾是不可达的。
就个人而言,我会在尝试之前添加一个else语句,以澄清这是一个if / else情况。
答案 3 :(得分:1)
PEP8建议return statements should be consistent:
在回复陈述中保持一致。 a中的所有返回语句 函数应该返回一个表达式,或者它们都不应该。如果有的话 return语句返回一个表达式,任何返回语句都没有 返回的值应该明确地将其声明为返回None,和 显式return语句应该出现在函数的末尾 (如果可以到达的话)。
引用示例:
是:
def foo(x):
if x >= 0:
return math.sqrt(x)
else:
return None
def bar(x):
if x < 0:
return None
return math.sqrt(x)
没有
def foo(x):
if x >= 0:
return math.sqrt(x)
def bar(x):
if x < 0:
return
return math.sqrt(x)
答案 4 :(得分:1)
在考虑使用/不使用return
编写函数的方法时,您可以考虑以下内容:
如果你的函数将修改它的任何参数,那么没有返回值是合适的,因为返回一个值可能会让人感到困惑。想想容器的就地变异。
如果函数应该在None
条件下返回可用值,但是条件没有通过,则可以使用返回True
。如果找不到合适的匹配项,请考虑正则表达式模式match
返回一个可用的对象(是的,python是关于对象的),如果该函数不会修改它的参数,而是使用它们来创建返回的对象。考虑sum
内置的其他内容。
您可能需要考虑其他事项,但要确保function
遵守Python的禅宗,尤其是:
如果实施难以解释,那就不好了。
答案 5 :(得分:0)
好的,基于我收到的好建议,我认为以下内容对我有用:
def func_name( myargument ):
if myargument.check():
return_value = "something meaningful"
else:
try:
return_value = myargument.somemethod()
except myError :
print("some helpful message")
return_value = None
raise
return return_value