❻: Bezieht sich auf den Fall, dass die gesuchte Nummer nicht gefunden wird. Es ist üblich, mit "0" oder "1" ab und zu zu urteilen, aber da "0" im Element des Entladungsarrays verwendet wird, wird es auf leicht verständliche Weise mit "-1" ausgedrückt. ❼: Schließlich werden die gesuchten Ergebnisse ausgegeben. 4. Ist es in Ordnung, in dem Teil, den ich hier gelernt habe, nicht ".round" hinzuzufügen (wird verwendet, wenn ein Fehler auftritt)? Es scheint, dass es automatisch abgerundet wird, wenn ich es nachschlage. Beim Runden auf die angegebene Stelle ist es zweckmäßig, mit ".round (2) <zu codieren. <Da bis zur 2. Stelle des Bruchs angezeigt wird, wird es auf die 3. Stelle des Bruchs gerundet>" usw.! Ruby, Rails, If, while, Binary Search Verschiedene Argumente von Funktionen in Python (Positionsargumente, optionale Argumente, Argumente variabler Länge, Schlüsselwortargumente) def func (arg, * args, ** kwargs)

Vorwort

Diesmal ist eine kleine Geschichte. Wieder wissen viele Leute nicht, wie man es bei der Arbeit benutzt, also dachte ich, ich würde es aufschreiben. Insbesondere Argumente variabler Länge und Schlüsselwortargumente. Wahrscheinlich, weil es nicht in anderen Hauptsprachen ist ... Wenn Sie suchen, können Sie so viele finden, wie Sie möchten ...

So erstellen Sie eine benutzerdefinierte Funktion in Python

Ich werde es mit Python 3.X-System tun. Dies ist die Basis.

##Funktionsdefinition *'Streit'Ist der Variablenname
def func('Streit'):
    # process
    return ret

if __name__ == '__main__':
    #Funktionsaufruf *'Streit'Ist eigentlich eine Variable oder ein Wert
    x = func('Streit') 

Dieses Mal, wie man das Argument hier weitergibt oder empfängt. Es wird gesagt, dass Python auf diese Weise empfangen werden kann.

Positionsargument

Eine Methode zum Empfangen von Positionsargumenten in der angegebenen Reihenfolge. Dies ändert sich in anderen Programmiersprachen nicht.

Beispielcode und Beschreibung

code


def func(arg1, arg2, arg3):
    return (arg1 * 3.0) + (arg2 * 2.0) + (arg3 * 1.0)

if __name__ == '__main__':
    y = func(4, 5, 6)
    print(y)

output


28.0

Der Anrufer übergibt jeweils 4,5,6. Daher wird es auf der Empfangsseite entsprechend der Position (Reihenfolge) übergeben. arg1 = 4、arg2 = 5、arg3 = 6 Daher beträgt der Verarbeitungsinhalt dieser Funktion 4 * 3 + 5 * 2 + 6 * 1 = 28.

Optionale Argumente

Es passiert nichts. Definieren Sie Argumente, die zum Zeitpunkt des Aufrufs nicht angegeben werden müssen.

Beispielcode und Beschreibung

code


def func(arg=1):
    print(arg)

if __name__ == '__main__':
    func()
    func(99)

output


1
99

Wenn das Argument arg zum Zeitpunkt der Definition weggelassen und aufgerufen wird, wird der Standardwert für die Behandlung festgelegt. Wenn "arg = 1" gesetzt wird, beginnt die Verarbeitung in der Funktion mit 1 in arg, wenn sie weggelassen wird.

Da das Argument beim ersten Aufruf weggelassen wird, wird der Standardwert 1 ausgegeben. Da das zweite Mal nicht weggelassen wird, wird die übergebene 99 ausgegeben.

Argument variabler Länge

Wie der Name schon sagt, sind Argumente mit variabler Länge eine Methode zum Empfangen einer nicht angegebenen Anzahl von n Argumenten. Fügen Sie dem Argumentnamen ein * (Sternchen) hinzu. Dieses Sternchen wird bei der Verarbeitung innerhalb einer Funktion nicht benötigt. Ich habe es noch nie in anderen Sprachen gesehen.

Beispielcode und Beschreibung

code


def func(*args):
    for i, v in enumerate(args):
        print('args[%d] = %s' % (i, v))

if __name__ == '__main__':
    func((1, 2), 3, 4, (5, 6), 7, 8)

output


args[0] = (1, 2)
args[1] = 3
args[2] = 4
args[3] = (5, 6)
args[4] = 7
args[5] = 8

Die Funktionsdefinition enthält nur ein Argument, der Aufrufer übergibt jedoch vier Argumente. Die Art und Weise, wie der Anrufer daran vorbeikommt, ist ebenfalls etwas schwierig. Das erste (1, 2) ist jetzt ein Tupel und (5, 6) ist dasselbe. Davon abgesehen hat ein numerischer Wert ein Argument. Wie Sie der Ausgabe entnehmen können, gibt es sechs Argumente.

Auf der Empfangsseite werden mehrere Argumente als ein Tupel an args übergeben. Da Tupel iterierbar ist, handelt es sich um eine Standardausgabe, die in einer for-Schleife um eins verschoben wird. Da es sich um Tupel handelt, können Sie an jeder Stelle mit args [i] in der Funktion auf den Argumentwert verweisen.

Natürlich können Sie nicht zwei machen, wie unten gezeigt. Ich weiß nicht, wo die erste variable Länge ist und wo die zweite variable Länge ist.

def func(*args1, *args2):
    print(args1, args2)

Schlüsselwortargument

Das Schlüsselwortargument ist auch ein Argument mit variabler Länge, und der Unterschied zum Argument mit variabler Länge besteht darin, dass es ein Schlüsselwort enthält. ・ ・ ・ ・ ・ ・ ・ Schwer in Worten zu erklären. Das Argument mit variabler Länge ist Tuple, während das Schlüsselwortargument Dictionary ist.

Beispielcode und Beschreibung

code


def func(**kwargs):
    print(kwargs['arg1'], kwargs['args'])
    # print(kwargs)
    
if __name__ == '__main__':
    func(arg1=1, args=(2, 3, 4), arg2=5)

output


1 (2, 3, 4)

Im Schlüsselwortargument übergibt der Aufrufer es in Form von "Schlüsselwort = Wert". In dieser Funktion ist kwargs ein Schlüsselwortargument, und "arg1" und "args" werden standardmäßig in der Funktion ausgegeben. Der Aufrufer gibt auch arg2 an, aber es wird nichts unternommen, da es in der Funktion nicht behandelt wird.

Da es übergeben wurde, gibt der auskommentierte Druck (kwargs) das Wörterbuch wie unten gezeigt aus.

python


{'arg1': 1, 'args': (2, 3, 4), 'arg2': 5}

Ich habe arg2 = 5 richtig erhalten.

Übrigens können Sie wie bei Argumenten mit variabler Länge keine zwei erstellen. Ich weiß nicht, welches Keyword-Argument.

In Kombination verwenden

Beachten Sie, dass bei kombinierter Verwendung die Position bis auf das Schlüsselwortargument wichtig ist.

Kombination aus Argument variabler Länge und Schlüsselwortargument
Dies ist eine übliche Kombination.

code


def func(*args, **kwargs):
    print('args = ', args)
    print('kwargs = ', kwargs)
    
if __name__ == '__main__':
    func(1, 2, 3, 4, arg1=5, arg2=6)

Vier Nicht-Schlüsselwortwerte in der ersten Hälfte des Aufrufs werden an die Argumente args mit variabler Länge übergeben. Argumente mit Schlüsselwörtern werden in der zweiten Hälfte an args übergeben. Wenn Sie diese Kombination als Einschränkung verwenden, muss sie zuerst ein Argument variabler Länge und dann ein Schlüsselwortargument sein.

code


def func(**kwargs, *args):
    ~~~~~

Dies ist eine ungültige Syntax.

Kombination von Positionsargumenten und Argumenten variabler Länge
Wenn das Positionsargument vor dem Argument variabler Länge geschrieben wird, wird es zum Positionsargument.

code


def func(arg1, arg2, *args):
    print('arg1 = ', arg1)
    print('arg2 = ', arg2)
    print('args = ', args)
    
if __name__ == '__main__':
    func(1, 2, 3, 4, 5)

output


arg1 =  1
arg2 =  2
args =  (3, 4, 5)

Es ist nicht zu schwierig. Die ersten beiden sind Positionsargumente, daher sind 1 und 2 arg1 bzw. arg2. Der Rest wird in Tuple als Argument variabler Länge zusammengefasst.

Kombination von Positions- und Schlüsselwortargumenten
Das stört mich nicht allzu sehr. Alle Positionsargumente werden zuerst definiert, und Schlüsselwortargumente werden zuletzt definiert.

code


def func(arg1, arg2, **kwargs):
    print('arg1 = ', arg1)
    print('arg2 = ', arg2)
    print('kargs = ', kwargs)
    
if __name__ == '__main__':
    func(1, 2, kwarg1=2, kwarg2=3)

output


arg1 =  1
arg2 =  2
kargs =  {'kwarg1': 2, 'kwarg2': 3}
Optionale Kombination und Kombination aus Schlüsselwortargumenten
Das ist auch einfach. Definieren Sie das Schlüsselwortargument zuletzt.

code


def func(arg=1, **kwargs):
    print('arg = ', arg)
    print('kargs = ', kwargs)
    
if __name__ == '__main__':
    func(kwarg1=2, kwarg2=3)
    func(99, kwarg1=100, kwarg2=101)

output


arg =  1
kargs =  {'kwarg1': 2, 'kwarg2': 3}
arg =  99
kargs =  {'kwarg1': 100, 'kwarg2': 101}

Beim Aufrufen fühlt es sich genauso an wie beim Kombinieren von Positionsargumenten und Schlüsselwortargumenten. Der Positionsargumentteil kann jedoch weggelassen werden. Wenn weggelassen, natürlich der Standardwert.

Kombination von optionalen Argumenten und Argumenten variabler Länge
Dies erfordert Aufmerksamkeit. Die Reihenfolge der Argumente kann verwendet werden, indem zuerst das Argument mit variabler Länge und die folgenden optionalen Argumente festgelegt werden.

code


def func(*args, arg=1):
    print('arg = ', arg)
    print('args = ', args)
    
if __name__ == '__main__':
    func(1, 2, 3, 4, arg=5)
    func(5, 6, 7, 8)

output


arg =  5
args =  (1, 2, 3, 4)
arg =  1
args =  (5, 6, 7, 8)

Darüber hinaus muss beim Aufruf der Argumentname als optionales Argument wie ein Schlüsselwortargument angegeben werden. Wenn zum Zeitpunkt des Aufrufs nicht angegeben, ist der Standardwert 1.

Punkte in Bezug auf die Objektorientierung

Wenn Sie Erfahrung mit anderen Sprachen haben, haben Sie sich vielleicht gefragt: "Hmm? Funktionsüberlastung?" In Python können Sie auf diese Weise eine nicht angegebene Anzahl von Argumenten übergeben. Darüber hinaus werden die Datentypen von Variablen auch dynamisch typisiert, was in anderen objektorientierten Programmiersprachen zu finden ist. ** In Python gibt es keine Überladung (Mehrfachdefinition). ** ** **

Wenn Sie die Methode zum Übergeben des Arguments dieses Mal vollständig nutzen und den Verarbeitungsinhalt in einer Funktion ändern, können Sie beispielsweise eine Überladung durchführen. Der Funktionsname ist jedoch derselbe, und die tatsächliche Überladung, die durch die Anzahl der Argumente und verschiedene Typen verursacht wird, kann nicht durchgeführt werden.

Wenn Sie versuchen, es so zu erzwingen, wie Sie es in anderen Sprachen gewohnt sind ...

overload


def func(arg):
    return arg

def func(arg1, arg2):
    return arg1, arg2

if __name__ == '__main__':
    ret = func(1)

output


TypeError: func() missing 1 required positional argument: 'arg2'

Überladungen mit unterschiedlicher Anzahl von Argumenten in anderen Sprachen, aber in Python ist dies ein Fehler. In Python, einem Interpreter, überschreibt die in der zweiten geschriebene Funktion jedoch die erste ** Der Inhalt des Fehlers lautet "arg2 ist nicht angegeben". Hinweis. ** ** **

Recommended Posts

❻: Bezieht sich auf den Fall, dass die gesuchte Nummer nicht gefunden wird. Es ist üblich, mit "0" oder "1" ab und zu zu urteilen, aber da "0" im Element des Entladungsarrays verwendet wird, wird es auf leicht verständliche Weise mit "-1" ausgedrückt. ❼: Schließlich werden die gesuchten Ergebnisse ausgegeben. 4. Ist es in Ordnung, in dem Teil, den ich hier gelernt habe, nicht ".round" hinzuzufügen (wird verwendet, wenn ein Fehler auftritt)? Es scheint, dass es automatisch abgerundet wird, wenn ich es nachschlage. Beim Runden auf die angegebene Stelle ist es zweckmäßig, mit ".round (2) <zu codieren. <Da bis zur 2. Stelle des Bruchs angezeigt wird, wird es auf die 3. Stelle des Bruchs gerundet>" usw.! Ruby, Rails, If, while, Binary Search Verschiedene Argumente von Funktionen in Python (Positionsargumente, optionale Argumente, Argumente variabler Länge, Schlüsselwortargumente) def func (arg, * args, ** kwargs)
Optionale Argumente und * args, ** kwargs
Schlüsselwortargumente für Python-Funktionen
Zusammenfassung verschiedener for-Anweisungen in Python
Beispiel für die Verwendung von Python> function> * args als Argument