Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Einführung in Parameter in Python-Funktionen

Detaillierte Einführung in Parameter in Python-Funktionen

不言
不言nach vorne
2018-10-09 16:33:173008Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Einführung in die Parameter in Python-Funktionen. Ich hoffe, dass er für Freunde hilfreich ist.

Funktionen definieren

Funktionen in Python werden mit dem Schlüsselwort def definiert, im Format:

def 函数名(形参):
    函数语句块

Funktionsnamen können nur Zeichenfolgen, Unterstriche und enthalten Zahlen und können nicht mit einer Zahl beginnen.
Die formalen Parameter der Funktion sind unterteilt in: Positionsparameter, Standardparameter (Parameter mit Standardwerten) und dynamische Parameter.
return ist ein Schlüsselwort, das verwendet wird, um das Ergebnis der Funktion zurückzugeben Wenn ein Fehler auftritt, wird die Funktion sofort beendet. Führen Sie dann andere Anweisungen aus Schreiben Sie nur Return und schreiben Sie später keinen anderen Inhalt. Die Funktion gibt None zurück.

return kann einen Wert eines beliebigen Datentyps zurückgeben. Wenn die Rückgabe mehrere Werte zurückgibt, werden diese in Tupeln organisiert. Das heißt, wenn mehrere Werte zurückgegeben werden, ist der Typ Tupel. Sie können mehrere Variablen verwenden, um Ergebnisse zu erhalten, aber die Anzahl der Variablen muss mit der Anzahl der zurückgegebenen Werte übereinstimmen. Das Beispiel sieht wie folgt aus:

def func(a,b):
return a,b 
print(func(1,2)) #按照位置传入参数,1赋值给a,2赋值给b
print(func(a=2,b=3))#按照关键字传入参数,指定a、b的值
print(func(3,b=6))#混合传入,此时注意,位置参数要在前面
#如果不指定实参会报错,因为函数中由位置参数,则调用函数时必须传入参数
#print(func())
Ausgabe:
    (1, 2)
    (2, 3)
    (3, 6)

Standardparameter

def func():
    return 1,'asd',(1,'a',['hello','world']),[1,2,3]
print('直接打印结果:',func())
a,b,c,d = func() 
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
直接打印结果: (1, 'asd', (1, 'a', ['hello', 'world']), [1, 2, 3])
a: 1
b: asd
c: (1, 'a', ['hello', 'world'])
d: [1, 2, 3]

Der Standardwert wird nur einmal zugewiesen. Dies macht einen Unterschied, wenn der Standardwert ein veränderbares Objekt ist, beispielsweise eine Liste, ein Wörterbuch oder eine Instanz der meisten Klassen. Beispielsweise akkumuliert die folgende Funktion die ihr (zuvor) übergebenen Parameter bei nachfolgenden Aufrufen:
def func(name,age=20):
    print('{}已经{}岁啦'.format(name,age))
func('刘小姐')#默认参数可以不传,这时age值为默认的20
func('刘小姐',28)#默认参数传值时则覆盖默认值

Bei jedem Aufruf der Schleife wird a kein Wert zugewiesen, obwohl keine Parameter an a übergeben werden. Leere Liste [], da der Standardwert nur einmal zugewiesen wird, sodass die Ausgabe wie folgt aussieht:

刘小姐已经20岁啦
刘小姐已经28岁啦

Wenn Sie nicht möchten, dass sich der Standardwert bei nachfolgenden Aufrufen ansammelt, können Sie ihn wie folgt definieren Funktion:

def func(a = []):
    a.append('x')
    return a
for i in range(6):
    print(func())
    ['x']
    ['x', 'x']
    ['x', 'x', 'x']
    ['x', 'x', 'x', 'x']
    ['x', 'x', 'x', 'x', 'x']
    ['x', 'x', 'x', 'x', 'x', 'x']

Dynamische Parameter

Dynamische Parameter werden in zwei Typen unterteilt:

Einer wird durch *args dargestellt, die redundante Positionsparameter einheitlich empfangen, gespeichert in Form eines Tupels

Das andere wird durch **kwargs dargestellt, das die redundanten Schlüsselwortparameter einheitlich empfängt und in Form eines Wörterbuchs speichert

Sehen wir uns zunächst ein Beispiel von *args

an

def func(a = None):
    if a is None: #如果a是None
        a = []
    a.append('x')
    return a
for i in range(6):
    print(func())
Obwohl es nur 4 formale Parameter gibt, haben wir 10 übergeben und 4-10 werden von *args empfangen, um ein Tupel zu bilden
['x']
['x']
['x']
['x']
['x']
['x']
Werfen wir einen Blick auf **kwargs

def func(a,b,c,*args):
    print('*args内容为:',args)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10))
    *args内容为: (4, 5, 6, 7, 8, 9, 10)
    55

Aus dem obigen Beispiel können wir ersehen, dass, wenn verschiedene Arten von formalen Parametern auftreten, ihre Reihenfolge sein sollte: Positionsparameter, dynamische Parameter
args, Standardparameter, dynamische Parameter
*keargs

Da davon ausgegangen wird, dass die Standardparameter vor

args stehen, also func(a,b,c=20,

args,

*kwargs), wird bei der Übergabe der Parameter der Wert angegeben Der formale Parameter c wird zuerst implementiert. Parameter 3 wird ein Wert zugewiesen (da die Position von 3 c entspricht, ist der Standardwert der Standardwert, wenn der Standardparameter nicht zugewiesen ist, und wenn er zugewiesen ist, wird der Standardwert überschrieben). Zu diesem Zeitpunkt ist c=3, aber c=20 erscheint später und es wird ein Fehler gemeldet. Da der formale Parameter c nicht zulässig ist, werden die Standardparameter nach

args geordnet Die Standardparameter müssen vor kwargs eingestuft werden, denn wenn sie später eingestuft werden, wird c=22 direkt von

kwargs empfangen, sodass die Standardparameter bedeutungslos sind. Dies ist nicht zulässig und ein Fehler

Das Folgende ist eine weitere Möglichkeit, die Standardparameter vor *args einzuordnen. Obwohl diese Methode ebenfalls das gleiche Ergebnis liefert, müssen Sie bei der Position des Werts von besonders vorsichtig sein c beim Aufruf. Darüber hinaus macht diese Methode die Standardparameter bedeutungslos, da der Standardwert 20 nie verwendet wird. Daher ist es sinnvoll, die Standardparameter nach *args einzufügen.

def func(a,b,*args,c=20,**kwargs):
    print('*args内容为:',args)
    print(c)
    print('**kwargs内容为:',kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10,c=22,x=11,y=33,z=66))
rrree

Eine schnelle Möglichkeit, dynamische Parameter zu übergeben

Für *args können Sie beim Übergeben von Parametern ein *-Zeichen vor lis hinzufügen und den Inhalt direkt übergeben

*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187
def func(a,b,c=20,*args,**kwargs):
    print('*args内容为:',args)
    print(c)
    print('**kwargs内容为:',kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,22,3,4,5,6,7,8,9,10,x=11,y=33,z=66))

Für **kwargs können Sie beim Übergeben von Parametern ** vor dic hinzufügen und den Inhalt direkt übergeben
*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187
def func(*args):
    return args
lis = [1,2,{3,4,5},6,7,[8,9,0,1,23],34,5,(56,67),78,23]
print(type(lis))
print(func(*lis))

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Parameter in Python-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen