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 ...
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.
Eine Methode zum Empfangen von Positionsargumenten in der angegebenen Reihenfolge. Dies ändert sich in anderen Programmiersprachen nicht.
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.
Es passiert nichts. Definieren Sie Argumente, die zum Zeitpunkt des Aufrufs nicht angegeben werden müssen.
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.
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.
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)
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.
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.
Beachten Sie, dass bei kombinierter Verwendung die Position bis auf das Schlüsselwortargument wichtig ist.
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.
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.
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}
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.
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.
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.
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