Ich möchte, dass meine Funktion 1, 2 oder 3 Werte in Bezug auf den Wert von bret und cret zurückgibt. Wie kann man etwas Klügeres tun? ::

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
4
Basj 7 Dez. 2013 im 17:42

6 Antworten

Beste Antwort

Wie wäre es mit:

def myfunc(a, bret=False, cret=False):
   ...
   return (a,) + ((b,) if bret else ()) + ((c,) if cret else ())
4
NPE 7 Dez. 2013 im 13:50

Bitte beachten Sie, wenn Sie Tupel zurückgeben müssen (in Ihrer Frage gibt es Tupel zurück), verwenden Sie dies -

def myfunc(a, bret=False, cret=False):
    return tuple([a] + [0 for i in (bret, cret) if i])
1
Arovit 7 Dez. 2013 im 14:32
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
thefourtheye 7 Dez. 2013 im 13:46
def myfunc(a, bret=False, cret=False):
    return [v for v, ret in [(a, True), (0, bret), (0, cret)] if ret]

Nehmen Sie sich einen Moment Zeit, um mehr über Python List Comprehensions zu erfahren. Sie sind sehr oft praktisch!

2
Robert Kajic 7 Dez. 2013 im 14:00

Sie können einfach Ihre return -Werte an eine Liste anhängen oder yield verwenden. Sie können das Ergebnis anschließend durchlaufen und tun, was Sie möchten. Hier ist eine Erklärung zum Schlüsselwort yield -: Was bewirkt das Schlüsselwort "ield "? Python?

1
Community 23 Mai 2017 im 12:16

Sie könnten eine Liste zurückgeben. Aussehen:

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

    list = []
    list.append(a)
    b=0
    c=0

    if bret:
        list.append(b)

    if cret:
        list.append(c)

    return list

Lösen Sie Ihre Frage?

1
ddetoni 7 Dez. 2013 im 14:03