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