python中的多个返回vs返回变量

时间:2016-11-08 22:24:31

标签: python

我是一名使用python的初学程序员,我想知道函数返回的最佳实践是什么。我有很多条件,但只要其中一个是真的,我想杀死该函数并返回一个bool值。 说,我们有:

a)
def foo():
    if condition1:
        return True
    if condition2:
        return True
    if condition3:
        return True
    return False

b)
def foo():
    bar = False
    if condition1:
        bar = True
    elif condition2:
        bar = True
    elif condition3:
        bar = True
    return bar

一种方式比另一方好吗?为什么?或者这是一些完全垃圾,应该以完全不同的方式实现?在其他语言中它是否与python不同(或者,是否有“pythonic”方式)? 提前感谢大家的答案。 顺便说一句,是否有最佳实践的标签,或类似的东西?

3 个答案:

答案 0 :(得分:5)

在我看来,第一个版本更像Pythonic,但它可以这样编写:

return condition1 or condition2 or condition3

答案 1 :(得分:3)

a.)b.)都有效。对于具有C等资源管理或调试且只想在一个地方中断的语言,首选项为b.)。见https://softwareengineering.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from。 对于Python和其他语言,使用它们是标准的。见Should a function have only one return statement?

答案 2 :(得分:2)

您不使用“bar”变量,也不需要创建它。

其他方式:

require 'image'
gm = require 'graphicsmagick'

-- change the string
local jpg_filename = string.gsub(train_files[i],".[Bb][Mm][Pp]$",".jpg")
-- get the info so we can build the size string
local image_info = gm.info(train_path .. train_files[i])
-- convert takes a size string h x w
local size_string = image_info["height"] .. "x" .. image_info["width"]

gm.convert{
  input = train_path .. train_files[i],
  output = train_path .. jpg_filename,
  size = size_string,
  quality = 95,
  verbose = true
}
local img_raw = image.load(train_path .. jpg_filename):mul(255)