logo

Standardargument i Python

Python tillåter funktionsargument att ha standardvärden. Om funktionen anropas utan argumentet får argumentet sitt standardvärde.

Standardargument:

Python har ett annat sätt att representera syntax och standardvärden för funktionsargument. Standardvärden indikerar att funktionsargumentet tar det värdet om inget argumentvärde skickas under funktionsanropet. Standardvärdet tilldelas genom att använda formulärets tilldelningsoperator (=). sökordsnamn =värde.
Låt oss förstå detta genom en funktion studerande . Funktionen studerande innehåller 3-argument varav 2 argument är tilldelade med standardvärden. Funktionen alltså studerande accepterar ett obligatoriskt argument ( förnamn ), och resten två argument är valfria.



Python3






arraylist sorterad



def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)>

>

>


Vi måste ha följande punkter i åtanke när vi anropar funktioner:

  1. I fallet med att passera nyckelordsargumenten är ordningen på argumenten viktig.
  2. Det bör bara finnas ett värde för en parameter.
  3. Det godkända sökordsnamnet bör matcha det faktiska sökordsnamnet.
  4. Vid anrop av en funktion som innehåller icke-sökordsargument är ordningen viktig.

Exempel #1: Anropar funktioner utan nyckelordsargument

Python3




def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)> # 1 positional argument> student(>'John'>)> # 3 positional arguments> student(>'John'>,>'Gates'>,>'Seventh'>)> # 2 positional arguments> student(>'John'>,>'Gates'>)> student(>'John'>,>'Seventh'>)>

>

>

Produktion:

John Mark studies in Fifth Standard John Gates studies in Seventh Standard John Gates studies in Fifth Standard John Seventh studies in Fifth Standard>

I det första anropet finns det bara ett obligatoriskt argument och resten använder standardvärdena. I det andra samtalet, efternamn och standardvärde för argument ersätts från standardvärde till nytt passerande värde. Vi kan se att argumentens ordning är viktig från funktionen 2:a, 3:e och 4:e anropen.

Exempel #2: Anropa funktioner med nyckelordsargument

Python3




def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)> # 1 keyword argument> student(firstname>=>'John'>)> # 2 keyword arguments> student(firstname>=>'John'>, standard>=>'Seventh'>)> # 2 keyword arguments> student(lastname>=>'Gates'>, firstname>=>'John'>)>

gjuta i sql

>

>

Produktion:

John Mark studies in Fifth Standard John Mark studies in Seventh Standard John Gates studies in Fifth Standard>

I det första anropet finns det bara ett obligatoriskt nyckelordsargument. I det andra anropet är ett obligatoriskt argument och ett är valfritt (standard), vars värde ersätts från standard till ett nytt passerande värde. I det tredje anropet kan vi se att ordningen i nyckelordsargument inte är viktig.

Exempel #3: Vissa ogiltiga funktionsanrop

Python3




def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)> # required argument missing> student()> # non keyword argument after a keyword argument> student(firstname>=>'John'>,>'Seventh'>)> # unknown keyword argument> student(subject>=>'Maths'>)>

träd- och grafteori
>

>

Ovanstående kod kommer att ge ett fel eftersom:

  • I det första anropet skickas inte värdet för parametern förnamn vilket är den nödvändiga parametern.
  • I det andra anropet finns det ett icke-sökordsargument efter ett nyckelordsargument.
  • I det tredje anropet matchas inte det godkända nyckelordsargumentet med de faktiska nyckelordsnamnargumenten.

Använder föränderliga objekt som standardvärden för argument i python

Detta måste göras mycket noggrant. Anledningen är att standardvärdena för argumenten endast utvärderas en gång när kontrollen når funktionen

Definition för första gången. Därefter refereras till samma värden (eller föränderliga objekt) i de efterföljande funktionsanropen.
Saker och ting blir mycket tydligare med exemplet

Python3




# mutable default argument values example using python list> # itemName is the name of the item that we want to add to list> # that is being passed, or if it is not passed then appending in> # the default list> def> appendItem(itemName, itemList>=> []):> >itemList.append(itemName)> >return> itemList> print>(appendItem(>'notebook'>))> print>(appendItem(>'pencil'>))> print>(appendItem(>'eraser'>))>

>

>

likvärdighetslagar
Produktion

['notebook'] ['notebook', 'pencil'] ['notebook', 'pencil', 'eraser']>

Vad du har förväntat dig om du antar att en ny lista skapas i varje funktionsanrop när vi inte skickar en lista till den

['anteckningsbok']

['penna']

['suddgummi']

Men som du kan se i själva utgången av programmet varje gång funktionen anropas används samma lista, ingen ny lista görs på ett nytt anrop.

Exempel med hjälp av ordbok

Python3




# mutable default argument values example using python dictionary> # itemName is the name of item and quantity is the number of such> # items are there> def> addItemToDictionary(itemName, quantity, itemList>=> {}):> >itemList[itemName]>=> quantity> >return> itemList> print>(addItemToDictionary(>'notebook'>,>4>))> print>(addItemToDictionary(>'pencil'>,>1>))> print>(addItemToDictionary(>'eraser'>,>1>))>

>

>

Produktion

{'notebook': 4} {'notebook': 4, 'pencil': 1} {'notebook': 4, 'pencil': 1, 'eraser': 1}>

Vad du har förväntat dig om du antar att en ny ordbok skapas i varje funktionsanrop

{'anteckningsbok': 4}

{‘penna’: 1}

{‘radergummi’: 1}

Men du kan tydligt se att den faktiska produktionen av programmet är annorlunda och det indikerar användningen av samma ordbok i varje efterföljande samtal.

Det viktigaste här är att vi bör undvika sådana scenarier.

Bästa metoder

Tilldela standardvärdet som ingen och kontrollera sedan i funktionen om det förväntade list- eller ordboksargumentet är inget eller inte.

Om det inte är någon, tilldela den en lista eller ordbok beroende på dina krav.

Python3




kali linux terminal
# using None as values of the default arguments> print>(>'#list'>)> def> appendItem(itemName, itemList>=>None>):> >if> itemList>=>=> None>:> >itemList>=> []> >itemList.append(itemName)> >return> itemList> print>(appendItem(>'notebook'>))> print>(appendItem(>'pencil'>))> print>(appendItem(>'eraser'>))> # using None as value of default parameter> print>(>' #dictionary'>)> def> addItemToDictionary(itemName, quantity, itemList>=> None>):> >if> itemList>=>=> None>:> >itemList>=> {}> >itemList[itemName]>=> quantity> >return> itemList> print>(addItemToDictionary(>'notebook'>,>4>))> print>(addItemToDictionary(>'pencil'>,>1>))> print>(addItemToDictionary(>'eraser'>,>1>))>

>

>

Produktion

#list ['notebook'] ['pencil'] ['eraser'] #dictionary {'notebook': 4} {'pencil': 1} {'eraser': 1}>

Här kan du tydligt se att varje gång en funktion anropas och en lista eller ordlista inte skickas som argument till funktionen så skapar den en ny lista eller ordlista.