使用Python返回1、2或3个值

206 阅读3分钟

在Python中,我们可能需要根据某些条件返回1、2或3个值。例如,函数myfunc接收三个参数a、bret和cret,其中bret和cret是布尔类型。根据bret和cret的值,我们需要返回不同的值。

huake_00063_.jpg 2、解决方案: 方法1:使用元组 这种方法是使用元组来返回多个值。元组是一种不可变的序列,可以存储任意类型的数据。在myfunc函数中,我们可以使用元组来返回a,b和c的值。如果bret和cret都是True,则返回a,b和c;如果只有bret是True,则返回a和b;如果只有cret是True,则返回a和c;如果bret和cret都是False,则只返回a。

def myfunc(a, bret=False, cret=False):
  b=0
  c=0
  if bret and cret:
    return (a,b,c)
  elif bret and not cret:
    return (a,b)
  elif not bret and cret:
    return (a,c)
  else:
    return (a,)

方法2:使用列表 这种方法是使用列表来返回多个值。列表是一种可变的序列,可以存储任意类型的数据。在myfunc函数中,我们可以使用列表来返回a,b和c的值。如果bret和cret都是True,则返回a,b和c;如果只有bret是True,则返回a和b;如果只有cret是True,则返回a和c;如果bret和cret都是False,则只返回a。

def myfunc (a, bret=False, cret=False):
  b, c, ret = 0, 0, [a]
  if bret: ret.append(b)
  if cret: ret.append(c)
  return ret

方法3:使用列表解析 这种方法是使用列表解析来返回多个值。列表解析是一种简洁的语法,可以用来创建列表。在myfunc函数中,我们可以使用列表解析来返回a,b和c的值。如果bret和cret都是True,则返回a,b和c;如果只有bret是True,则返回a和b;如果只有cret是True,则返回a和c;如果bret和cret都是False,则只返回a。

def myfunc(a, bret=False, cret=False):
    return [v for v, ret in [(a, True), (0, bret), (0, cret)] if ret]

方法4:使用yield 这种方法是使用yield来返回多个值。yield是一种生成器表达式,可以用来生成一个序列。在myfunc函数中,我们可以使用yield来返回a,b和c的值。如果bret和cret都是True,则返回a,b和c;如果只有bret是True,则返回a和b;如果只有cret是True,则返回a和c;如果bret和cret都是False,则只返回a。

def myfunc(a, bret=False, cret=False):
    b, c = 0, 0
    yield a
    if bret:
        yield b
    if cret:
        yield c

方法5:使用字典 这种方法是使用字典来返回多个值。字典是一种映射类型,可以将键映射到值。在myfunc函数中,我们可以使用字典来返回a,b和c的值。如果bret和cret都是True,则返回a,b和c;如果只有bret是True,则返回a和b;如果只有cret是True,则返回a和c;如果bret和cret都是False,则只返回a。

def myfunc(a, bret=False, cret=False):
    d = {'a': a}
    if bret:
        d['b'] = 0
    if cret:
        d['c'] = 0
    return d

方法6:使用类 这种方法是使用类来返回多个值。类是一种数据类型,可以创建对象。在myfunc函数中,我们可以创建一个类来返回a,b和c的值。如果bret和cret都是True,则返回a,b和c;如果只有bret是True,则返回a和b;如果只有cret是True,则返回a和c;如果bret和cret都是False,则只返回a。

class MyClass:
    def __init__(self, a, bret, cret):
        self.a = a
        self.b = 0 if not bret else 0
        self.c = 0 if not cret else 0

def myfunc(a, bret=False, cret=False):
    return MyClass(a, bret, cret)