Python funkciju argumenti (noklusējums, atslēgvārds un patvaļīgi)

Programmā Python varat definēt funkciju, kas aizņem mainīgu argumentu skaitu. Šajā rakstā jūs iemācīsities definēt šādas funkcijas, izmantojot noklusējuma, atslēgvārdu un patvaļīgus argumentus.

Video: Python funkciju argumenti: pozicionēšana, atslēgvārdi un noklusējums

Argumenti

Lietotāja definētajā funkciju tēmā mēs uzzinājām par funkcijas definēšanu un izsaukšanu. Pretējā gadījumā funkcijas izsaukums radīs kļūdu. Šeit ir piemērs.

 def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")

Rezultāts

 Sveika Monika, labrīt!

Šeit funkcijai greet()ir divi parametri.

Tā kā mēs esam saukuši šo funkciju ar diviem argumentiem, tā darbojas nevainojami, un mēs nesaņemam kļūdu.

Ja to izsauksim ar citu argumentu skaitu, tulks parādīs kļūdas ziņojumu. Zemāk ir izsaukums uz šo funkciju ar vienu un bez argumentiem kopā ar attiecīgajiem kļūdu ziņojumiem.

 >>> sveiciens ("Monica") # tikai viens arguments TypeError: greet () trūkst 1 obligātā pozīcijas argumenta: 'msg'
 >>> greet () # argumentu nav TypeError: greet () trūkst 2 nepieciešamo pozicionālo argumentu: 'name' un 'msg'

Mainīgo funkciju argumenti

Līdz šim funkcijām bija noteikts argumentu skaits. Programmā Python ir citi veidi, kā definēt funkciju, kas var aizņemt mainīgu argumentu skaitu.

Trīs dažādas šāda veida formas ir aprakstītas turpmāk.

Python noklusējuma argumenti

Funkciju argumentiem Python var būt noklusējuma vērtības.

Mēs varam nodrošināt argumenta noklusējuma vērtību, izmantojot piešķiršanas operatoru (=). Šeit ir piemērs.

 def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")

Rezultāts

Sveika Kate, labrīt! Sveiks, Brūss, kā tev iet?

Šajā funkcijā parametram namenav noklusējuma vērtības, un zvana laikā tas ir nepieciešams (obligāts).

No otras puses, parametra msgnoklusējuma vērtība ir "Good morning!". Tātad zvana laikā tas nav obligāts. Ja vērtība ir norādīta, tā pārrakstīs noklusējuma vērtību.

Jebkuram funkciju argumentu skaitam var būt noklusējuma vērtība. Bet, kad mums ir noklusējuma arguments, visiem argumentiem, kas atrodas pa labi, jābūt arī noklusējuma vērtībām.

Tas nozīmē teikt, ka argumenti, kas nav noklusējuma argumenti, nevar sekot noklusējuma argumentiem. Piemēram, ja mēs iepriekš būtu definējuši funkcijas galveni:

 def sveiciens (msg = "Labrīt!", nosaukums):

Mēs saņemsim kļūdu kā:

 SyntaxError: arguments pēc noklusējuma seko noklusējuma argumentam

Python atslēgvārdu argumenti

Kad mēs izsaucam funkciju ar dažām vērtībām, šīs vērtības tiek piešķirtas argumentiem atbilstoši viņu pozīcijai.

Piemēram, iepriekš minētajā funkcijā greet(), kad mēs to saucām kā greet("Bruce", "How do you do?"), vērtība "Bruce"tiek piešķirta argumenta nosaukumam un līdzīgi "How do you do?"kā msg.

Python ļauj izsaukt funkcijas, izmantojot atslēgvārdu argumentus. Šādi izsaucot funkcijas, var mainīt argumentu secību (pozīciju). Pēc izsaukumiem uz iepriekš minēto funkciju visi ir derīgi un rada tādu pašu rezultātu.

 # 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?") 

Kā redzam, funkciju izsaukuma laikā mēs varam sajaukt pozīcijas argumentus ar atslēgvārdu argumentiem. Bet mums jāpatur prātā, ka atslēgvārdu argumentiem jāseko pozicionālajiem argumentiem.

Pozicionāla argumenta iegūšana pēc atslēgvārdu argumentiem radīs kļūdas. Piemēram, funkcijas izsaukums ir šāds:

 greet(name="Bruce","How do you do?")

Rezultātā radīsies kļūda:

 SyntaxError: atslēgvārds arg pēc atslēgvārda arg

Python patvaļīgi argumenti

Dažreiz mēs iepriekš nezinām argumentu skaitu, kas tiks nodoti funkcijai. Python ļauj mums rīkoties šāda veida situācijās, izmantojot funkciju izsaukumus ar patvaļīgu argumentu skaitu.

Funkcijas definīcijā mēs izmantojam zvaigznīti (*) pirms parametra nosaukuma, lai apzīmētu šāda veida argumentus. Šeit ir piemērs.

 def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")

Rezultāts

 Sveika Monika Sveika Lūka Sveiks Stīvs Sveiks Džons

Šeit mēs esam izsaukuši funkciju ar vairākiem argumentiem. Šie argumenti tiek iesaiņoti dubultā, pirms tiek nodoti funkcijai. Funkcijas iekšpusē mēs izmantojam forcilpu, lai izgūtu visus argumentus atpakaļ.

Interesanti raksti...