2017-04-17 1 views
0

Standardmäßig sollten b und c-Werte 0. Wenn ich einige Parameter übergeben, sollte es aber genommen werden, wenn ich Parameter übergebe nur Standardwerte nehmen. warum es keine Parameter nehmen, die vorbei iWenn ich Werte von außerhalb übertrage, werden nur Standardwerte übernommen. Wie kann ich dieses Problem debuggen

Der Code:

import sys 

def add(a, b, c): 
    d = int(a) + int(b) + int(c) 
    print "add: " + str(d) 

def main(): 
    a = sys.argv[1] 
    b = sys.argv[2] 
    c = sys.argv[3] 
    ret = add(a, b=0, c=0) 

if __name__ == '__main__': 
    main() 

Antwort

0

Es sollte wie sein

import sys 

def add(a, b=0, c=0): 
    d = int(a) + int(b) + int(c) 
    print "add: " + str(d) 

def main(): 
    a = sys.argv[1] 
    b = sys.argv[2] 
    c = sys.argv[3] 
    ret = add(a, b=5, c=6) 

if __name__ == '__main__': 
    main() 
+1

Was sind 'x' und' y'? Diese Namen sind nicht definiert. – Wombatz

+0

x und y sind die Zahlen, die Sie übergeben möchten. Dasselbe wurde aktualisiert. –

0

Wenn Sie möchten, auf Werte von sys.argv erhalten, und standardmäßig auf Null, wenn nicht Stellen Sie so etwas ein:

a = sys.argv[1] if len(sys.argv) > 1 else 0 
b = sys.argv[2] if len(sys.argv) > 2 else 0 
c = sys.argv[3] if len(sys.argv) > 3 else 0 
ret = add(a, b, c) 
0

Die Werte b und c referenziert in main unterscheidet sich von denen in den Eingaben für add().

Betrachten Sie dies als eine Möglichkeit zu klären, welche Werte übergeben werden.

def main(): 
    x = sys.argv[1] 
    y = sys.argv[2] 
    z = sys.argv[3] 
    ret = add(x, b=y, c=z) 

Sie könnten b = sys.argv[2] gesetzt und dann add(a, b=b, c) rufen die gleichen Namen zu halten.

In Bezug auf die Festlegung von Standardwerten, die verwendet werden sollen, wenn keine Werte angegeben sind, empfiehlt es sich, Standardwerte in die Funktion zu übernehmen. Innerhalb add in Ihrem Fall.

import sys 

def add(a, b=0, c=0): # default b and c to 0 but a is not set with default 
    d = int(a) + int(b) + int(c) 
    print "add: " + str(d) 
    return d # return value otherwise you return None 

def main(): 
    a = sys.argv[1] 
    b = sys.argv[2] 
    c = sys.argv[3] 
    # store d from add() to ret variable. 
    ret = add(a, b, c) 

if __name__ == '__main__': 
    main() 
Verwandte Themen