Na tej podstawie
Argument pozycyjny to nazwa, po której nie następuje znak równości (=) i wartość domyślna.
Po argumencie słowa kluczowego następuje znak równości i wyrażenie, które podaje jego wartość domyślną.
def rectangleArea(width, height):
return width * height
print rectangleArea(width=1, height=2)
Pytanie > Zakładam, że oba argumenty width
i height
są argumentami pozycyjnymi. W takim razie dlaczego możemy go również wywołać za pomocą składni argumentu słowa kluczowego?
Odpowiedzi:
Cytowany tekst służy do definicji funkcji i nie ma nic wspólnego z wywołaniami funkcji. W wywołaniu tej funkcji używasz funkcji „nazwany argument”. Ten link, który podasz, nie jest zbyt dobrej jakości, autorzy wydają się być zdezorientowani między dwoma różnymi rzeczami.
Dokumentacja Pythona odnosi się do argumentów pozycyjnych i słów kluczowych tylko w odniesieniu do wywołania funkcji (zobacz sekcję
5.3.4 Calls
).Kiedy mówią o definicji funkcji w sekcji
7.6 Function definitions
, jest to zupełnie inny termin „domyślne wartości parametrów”.Podejrzewam, że osoby, które razem wzięte, że kurs-ware nie były całkowicie zaznajomiony z Pythona :-)
Jako przykład odwołaj się do następującej definicji i wywołań:
def fn (a, b, c = 1): # a/b required, c optional. return a * b + c print fn (1, 2) # returns 3, positional and default. print fn (1, 2, 3) # returns 5, positional. print fn (c = 5, b = 2, a = 2) # returns 9, named. print fn (b = 2, a = 2) # returns 5, named and default. print fn (5, c = 2, b = 1) # returns 7, positional and named. print fn (8, b = 0) # returns 1, positional, named and default.
Znaczenie
=
zmian w zależności od tego, czy jest to definicja, czy zaproszenie.W definicji oznacza argument jako opcjonalny i ustawia wartość domyślną.
W wywołaniu po prostu pozwala ci określić, które argumenty powinny być wartościami, w dowolnej kolejności.
źródło
Ponieważ python 3.8 wprowadził tylko argumenty pozycyjne, ten post wymaga aktualizacji.
Argumenty pozycyjne, argumenty słów kluczowych, argumenty wymagane i argumenty opcjonalne są często mylone. Argumenty pozycyjne NIE SĄ TAKIE SAME JAK argumenty wymagane. i słowa kluczowe argumenty NIE SĄ TAKIE SAME JAK argumenty opcjonalne.
Argumenty pozycyjne to argumenty, które można wywołać na podstawie ich pozycji w definicji funkcji.
Argumenty słów kluczowych to argumenty, które można wywołać za pomocą nazwy.
Argumenty wymagane to argumenty, które należy przekazać do funkcji.
Argumenty opcjonalne to argumenty, których nie można przekazać do funkcji. W Pythonie opcjonalne argumenty to argumenty, które mają wartość domyślną .
Argument pozycyjny, który jest opcjonalny (Python 3.8)
def f(a=2, /): pass f() # Allowed, argument is optional f(1) # Allowed, it's a positional argument f(a=1) # Error, positional only argument
Wymagany argument pozycyjny (Python 3.8)
def f(a, /): pass f() # Error, argument required f(1) # Allowed, it's a positional argument f(a=1) # Error, positional only argument
Argument słowa kluczowego, który jest opcjonalny
def f(*, a=1): pass f() # Allowed f(1) # Error, keyword only arguments f(a=1) # Allowed, it's a keyword argument
argument słowa kluczowego, który jest wymagany
def f(*, a) pass f() # Error, argument required f(1) # Error, keyword only arguments f(a=1) # Allowed, it's a keyword argument
Argument pozycyjny i słowo kluczowe, który jest opcjonalny
def f(a=1) pass f() # Allowed, argument is optional f(1) # Allowed, it's a positional argument f(a=1) # Allowed, it's a keyword argument # In fact this function is the same as def f(*, a=1, /): pass
Wymagany argument pozycyjny i słowo kluczowe
def f(a): pass f() # Error, argument required f(1) # Allowed, it's a positional argument f(a=1) # Allowed, it's a keyword argument # In fact this function is the same as def f(*, a, /): pass
Podsumowując, argument może być opcjonalny lub wymagany, a nie oba jednocześnie . Może być również pozycyjny, kluczowy lub oba jednocześnie .
Python 3.8 wprowadził parametry tylko pozycyjne .
def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument): pass
źródło
f(/,a,*)
zamiastf(*, a, /)
w ostatnich dwóch przykładach?Argument słowa kluczowego to po prostu argument pozycyjny z wartością domyślną. Musisz określić wszystkie argumenty, które nie mają wartości domyślnej. Innymi słowy, argumenty słów kluczowych są tylko „opcjonalne”, ponieważ zostaną ustawione na wartość domyślną, jeśli nie zostaną konkretnie podane.
źródło
Argumenty pozycyjne można wywołać, używając wartości w kolejności lub nadając im nazwy. Na przykład wszystkie trzy z poniższych działań będą działać w ten sam sposób:
def rectangleArea(width, height): return width * height print(rectangleArea(1, 2)) print(rectangleArea(width=1, height=2)) print(rectangleArea(height=2, width=1))
źródło
name=
) W wywołaniu funkcji lub przekazany jako wartość w słowniku poprzedzona znakiem**
. Te dwie definicje są sprzeczne z twoim przykładem.argumenty pozycyjne: argumenty przekazane do funkcji w prawidłowej kolejności pozycyjnej. poniżej program rozumie pozycyjne argumenty funkcji
#positional arguments example def combine(str1, str2): #To join str1 and str2 with str3 str3 = str1 + str2 print(str3) #call combine() and pass 2 strings combine("Well", "come") #positional arguments
przypuśćmy, że minęło „przyjdź” jako pierwsze, „dobrze” drugie, a potem wynik będzie dobrze. również wywołanie funkcji, ciągi 3 stają się błędem.
źródło
Zrozumienie argumentów słów kluczowych funkcji.
Argumenty słów kluczowych to argumenty, które identyfikują parametry na podstawie ich nazw.
#keyword arguments example: def employee(name, Id): print("Employee Name: ", name) print("Employee Id : ", Id) #call employee() and pass 2 arguments employee(name = "inban", Id = "pay001") employee(Id = "pay002", name = "karthik") #we can change the order args.
źródło
Pomocne może być tutaj zdefiniowanie parametrów i argumentów.
Na przykład,
def my_function(parameter_1, parameter_2): pass my_function(argument_1, argument_2)
Teraz, kiedy mówisz argument pozycyjny, mówisz o argumentach , więc nie ma to nic wspólnego z definicją funkcji.
width
awheight
twoim przykładzie są to parametry pozycyjne lub parametry słów kluczowych (tzw. parametry pozycyjne lub słowa kluczowe).Sposób wywoływania / przekazywania wartości do funkcji określa, czy są to argumenty pozycyjne, czy argumenty słów kluczowych .
rectangleArea(1, 2) # positional arguments rectangleArea(width=1, height=2) # keyword arguments
Niewiele osób wie, że można określić parametr tylko pozycyjny, używając
/
w liście parametrów (przykład tutaj ).def func(positional_only1, positional_only2, /, positional_or_keyword): ...
Podobnie, możesz mieć parametry zawierające tylko słowa kluczowe, używając
*
znaku.def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...
Wreszcie mamy również var-pozycyjne i var-słowo kluczowe (aka odpowiednio * args i ** kwargs). Oznacza to, że do funkcji można przekazać dowolną sekwencję argumentów pozycyjnych lub argumentów słów kluczowych.
źródło