2016-07-14 13 views
1

Suchen Sie nach einer Anleitung, wie ich die Argumente in anderen Funktionen mit * Args richtig entpacken kann? Dies ist der Code;entpacken Rückgabefunktion Argumente mit * args

#!/usr/bin/python 

def func1(): 

    test1 = 'hello' 
    test2 = 'hey' 

    return test1, test2 


def func2(*args): 

    print args[0] 
    print args[1] 

func2(func1) 

Die Fehlermeldung, die ich bekomme;

<function func1 at 0x7fde3229a938> 
Traceback (most recent call last): 
    File "args_test.py", line 19, in <module> 
    func2(func1) 
    File "args_test.py", line 17, in func2 
    print args[1] 
IndexError: tuple index out of range 

Ich habe ein paar Dinge wie args() versucht, aber ohne Erfolg. Was mache ich falsch beim Auspacken?

+1

Versuchen 'func2 (func1())' – Dipak

+0

Sie meinen 'func2 (* func1())' @DipakChandranP :) – Bahrom

+0

@Bahrom Nein, nur mit out '*', wie: 'func2 (func1())' – Dipak

Antwort

3

Sie haben func nicht aufgerufen, so dass Ihr func2 tatsächlich ein einzelnes Argument erhält, das ein Funktionsobjekt ist. Ändern Sie Ihren Code: func2(*func1())

# While you're at it, also unpack the results so hello and hey are interpreted as 2 separate string arguments, and not a single tuple argument 
>>> func2(*func1()) 
hello 
hey 

>>> func2(func1) 
<function func1 at 0x11548AF0> 

Traceback (most recent call last): 
    File "<pyshell#29>", line 1, in <module> 
    func2(func1) 
    File "<pyshell#19>", line 4, in func2 
    print args[1] 
IndexError: tuple index out of range 

Zum Vergleich:

>>> func1 
<function func1 at 0x11548AF0> 
>>> func1() 
('hello', 'hey') 
>>> 
+0

'func2 (* func1())': Kannst du bitte erklären, wie genau diese Aussage funktioniert? "*" dazu !!! – Dipak

+1

'*' ist der entpackende Operator, der die Tupelausgabe von 'func1()' in zwei Argumente entpackt. Angenommen, 'func1' gibt '(1, 2) zurück.' Wenn Sie 'func2 (func1())' nur tun, dann rufen Sie 'func2 ((1, 2))' 'auf (beachten Sie, dass es nur ein Argument gibt ein Tupel aus zwei Elementen). Der Aufruf von 'func2 (* (1, 2))' entpackt das Tupel in zwei Argumente, was zu 'func2 (1, 2)' führt. – Bahrom

+1

Oh, danke. rechts: '>>> f2 (f1())' '((2, 4),)' '>>> f2 (* f1())' '(2, 4)' – Dipak

-1

func2 mehrere Argumente übernimmt und Sie nur in Ihrem Code
Sie angegeben wird, kann leicht sehen, ob durch die alle args Druck. Sie können auch sehen, dass args[1] nicht args[0] nicht gedruckt wird, da Sie ein Argument an diese Funktion übergeben haben.

Verwandte Themen