Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python Functions Uitgelegd: Herbruikbare Code Modules Bouwen

Wat is een Functie?

Een functie is een blok georganiseerde, herbruikbare code die gebruikt wordt om een enkele, gerelateerde actie uit te voeren. Functies bieden betere modulariteit voor je applicatie en een hoge graad van code-herbruik.

Zoals je al weet, geeft Python je veel ingebouwde functies zoals print(), etc., maar je kunt ook je eigen functies aanmaken. Deze functies heten user-defined functions (door de gebruiker gedefinieerde functies).

Een Functie Definiëren

Je kunt functies definiëren om de vereiste functionaliteit te bieden. Hier zijn eenvoudige regels om een functie in Python te definiëren:

  • Functie-blokken beginnen met het sleutelwoord def gevolgd door de functienaam en haakjes ( ( ) ).

  • Eventuele invoerparameters of argumenten moeten binnen deze haakjes geplaatst worden. Je kunt ook parameters binnen deze haakjes definiëren.

  • Het eerste statement van een functie kan een optioneel statement zijn – de documentatiestring van de functie of docstring.

  • Het codeblok binnen elke functie begint met een dubbele punt (:) en is ingesprongen.

  • Het statement return [expressie] verlaat een functie, optioneel een expressie doorgevend aan de aanroeper. Een return-statement zonder argumenten is hetzelfde als return None.

Syntaxis

def functionname(parameters):
    "function_docstring"
    function_suite
    return [expression]

Standaard hebben parameters een positioneel gedrag en moet je ze in dezelfde volgorde doorgeven als ze gedefinieerd zijn.

Voorbeeld

De volgende functie neemt een string als invoerparameter en print het op het standaard scherm.

def printme(str):
    "Dit print een doorgegeven string in deze functie"
    print str
    return

Een Functie Aanroepen

Een functie definiëren geeft het alleen een naam, specificeert de parameters die in de functie zitten en structureert de codeblokken.

Zodra de basisstructuur van een functie afgerond is, kun je het uitvoeren door het aan te roepen vanuit een andere functie of direct vanaf de Python-prompt. Hier is het voorbeeld om printme() functie aan te roepen:

#!/usr/bin/python
# Functiedefinitie hier
def printme(str):
    "Dit print een doorgegeven string in deze functie"
    print str
    return
# Nu kun je printme-functie aanroepen
printme("Ik ben de eerste aanroep naar user-defined functie!")
printme("Opnieuw tweede aanroep naar dezelfde functie")

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Ik ben de eerste aanroep naar user-defined functie!
Opnieuw tweede aanroep naar dezelfde functie

Pass by Reference vs Value

Alle parameters (argumenten) in Python worden by reference doorgegeven. Dit betekent dat als je wijzigt waar een parameter naar verwijst binnen een functie, de wijziging ook terugweerspiegeld wordt in de aanroepende functie. Bijvoorbeeld:

#!/usr/bin/python
# Functiedefinitie hier
def changeme(mylist):
    "Dit wijzigt een doorgegeven lijst in deze functie"
    mylist.append([1, 2, 3, 4])
    print "Waarden binnen de functie: ", mylist
    return
# Nu kun je changeme-functie aanroepen
mylist = [10, 20, 30]
changeme(mylist)
print "Waarden buiten de functie: ", mylist

Hier houden we de referentie van het doorgegeven object en voegen waarden toe aan hetzelfde object. Dit produceert het volgende resultaat:

Waarden binnen de functie: [10, 20, 30, [1, 2, 3, 4]]
Waarden buiten de functie: [10, 20, 30, [1, 2, 3, 4]]

Er is nog een voorbeeld waar een argument by reference doorgegeven wordt en de referentie binnen de aangeroepen functie wordt overschreven.

#!/usr/bin/python
# Functiedefinitie hier
def changeme(mylist):
    "Dit wijzigt een doorgegeven lijst in deze functie"
    mylist = [1, 2, 3, 4]  # Dit wijst een nieuwe referentie toe in mylist
    print "Waarden binnen de functie: ", mylist
    return
# Nu kun je changeme-functie aanroepen
mylist = [10, 20, 30]
changeme(mylist)
print "Waarden buiten de functie: ", mylist

De parameter mylist is lokaal voor de functie changeme. Het wijzigen van mylist binnen de functie beïnvloedt mylist niet. De functie bereikt niets en produceert uiteindelijk het volgende resultaat:

Waarden binnen de functie: [1, 2, 3, 4]
Waarden buiten de functie: [10, 20, 30]

Functie Argumenten

Je kunt een functie aanroepen met de volgende typen formele argumenten:

  • Vereiste argumenten (Required arguments)
  • Keyword-argumenten (Keyword arguments)
  • Standaard-argumenten (Default arguments)
  • Variabele-lengte argumenten (Variable-length arguments)

Vereiste Argumenten

Vereiste argumenten zijn de argumenten die in de juiste positionele volgorde aan een functie doorgegeven worden. Hier moet het aantal argumenten in de functie-aanroep exact overeenkomen met de functiedefinitie.

Om de functie printme() aan te roepen, moet je zeker één argument doorgeven, anders krijg je een syntax-fout:

#!/usr/bin/python
# Functiedefinitie hier
def printme(str):
    "Dit print een doorgegeven string in deze functie"
    print str
    return
# Nu roep printme-functie aan
printme()

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Traceback (most recent call last):
  File "test.py", line 11, in 
    printme()
TypeError: printme() takes exactly 1 argument (0 given)

Keyword Argumenten

Keyword-argumenten zijn gerelateerd aan de functie-aanroepen. Wanneer je keyword-argumenten in een functie-aanroep gebruikt, identificeert de aanroeper de argumenten aan de hand van de parameternaam.

Dit stelt je in staat om argumenten over te slaan of ze in een andere volgorde te plaatsen, omdat de Python-interpreter de keywords kan gebruiken om de waarden met parameters te matchen. Je kunt ook keyword-aanroepen doen naar de printme() functie op de volgende manieren:

#!/usr/bin/python
# Functiedefinitie hier
def printme(str):
    "Dit print een doorgegeven string in deze functie"
    print str
    return
# Nu roep printme-functie aan
printme(str="Mijn string")

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Mijn string

Het volgende voorbeeld geeft een duidelijker beeld. Let op dat de volgorde van parameters niet uitmaakt.

#!/usr/bin/python
# Functiedefinitie hier
def printinfo(name, age):
    "Dit print doorgegeven info in deze functie"
    print "Naam: ", name
    print "Leeftijd: ", age
    return
# Nu roep printinfo-functie aan
printinfo(age=50, name="miki")

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Naam: miki
Leeftijd: 50

Standaard Argumenten

#!/usr/bin/python
# Functiedefinitie hier
def printinfo(name, age=35):
    "Dit print doorgegeven info in deze functie"
    print "Naam: ", name
    print "Leeftijd: ", age
    return
# Nu roep printinfo-functie aan
printinfo(age=50, name="miki")
printinfo(name="miki")

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Naam: miki
Leeftijd: 50
Naam: miki
Leeftijd: 35

Variabele-lengte Argumenten

Je kunt een functie moeten verwerken voor meer argumenten dan je specificerde tijdens het definiëren van de functie. Deze argumenten heten variable-length argumenten en worden niet genoemd in de functiedefinitie, in tegenstelling tot vereiste en standaard-argumenten.

Syntaxis voor een functie met non-keyword variabele argumenten is:

def functionname([formal_args,] *var_args_tuple):
    "function_docstring"
    function_suite
    return [expression]

Een asterisk (*) wordt geplaatst voor de variabelenaam die de waarden van alle non-keyword variabele argumenten bevat. Deze tuple blijft leeg als er geen additionele argumenten gespecificeerd zijn tijdens de functie-aanroep. Hier is een simpel voorbeeld:

#!/usr/bin/python
# Functiedefinitie hier
def printinfo(arg1, *vartuple):
    "Dit print variabele doorgegeven argumenten"
    print "Output is: "
    print arg1
    for var in vartuple:
        print var
    return
# Nu roep printinfo-functie aan
printinfo(10)
printinfo(70, 60, 50)

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Output is: 10
Output is: 70 60 50

Anonieme Functies

Deze functies heten anoniem omdat ze niet op de standaardmanier gedeclareerd worden met het def sleutelwoord. Je kunt het lambda sleutelwoord gebruiken om kleine anonieme functies te maken.

  • Lambda-vormen kunnen elk aantal argumenten nemen maar retourneren slechts één waarde in de vorm van een expressie. Ze kunnen geen commando's of meerdere expressies bevatten.

  • Een anonieme functie kan geen directe aanroep zijn naar print, omdat lambda een expressie vereist.

  • Lambda-functies hebben hun eigen lokale namespace en kunnen geen variabelen benaderen dan die in hun parameterlijst en die in de globale namespace.

  • Hoewel het lijkt alsof lambda's een one-line versie van een functie zijn, zijn ze niet equivalent aan inline-statements in C of C++, wiens doel is om functie-stack-allocatie tijdens aanroep over te slaan voor prestatiedoeleinden.

Syntaxis

De syntaxis van lambda functies bevat slechts een enkele statement, als volgt:

lambda [arg1 [,arg2,.....argn]]: expressie

Het volgende voorbeeld toont hoe de lambda vorm van een functie werkt:

#!/usr/bin/python
# Functiedefinitie hier
sum = lambda arg1, arg2: arg1 + arg2
# Nu kun je sum als functie aanroepen
print "Waarde van totaal: ", sum(10, 20)
print "Waarde van totaal: ", sum(20, 20)

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Waarde van totaal: 30
Waarde van totaal: 40

De return Statement

Het statement return [expressie] verlaat een functie, optioneel een expressie doorgevend aan de aanroeper. Een return-statement zonder argumenten is hetzelfde als return None.

Alle bovenstaande voorbeelden retourneren geen waarde. Je kunt een waarde van een functie retourneren als volgt:

#!/usr/bin/python
# Functiedefinitie hier
def sum(arg1, arg2):
    # Tel beide parameters op en retourneer ze
    total = arg1 + arg2
    print "Binnen de functie: ", total
    return total
# Nu roep sum-functie aan
total = sum(10, 20)
print "Buiten de functie: ", total

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Binnen de functie: 30
Buiten de functie: 30

Scope van Variabelen

Alle variabelen in een programma zijn niet op alle locaties in dat programma toegankelijk. Dit hangt af van waar je een variabele hebt gedeclareerd.

De scope van een variabele bepaalt welk deel van het programma je kunt benaderen voor een specifieke identifier. Er zijn twee basisscopes van variabelen in Python:

  • Globale variabelen
  • Lokale variabelen

Globale vs. Lokale Variabelen

Variabelen die binnen een functie-body gedefinieerd zijn, hebben een lokale scope, en die buiten gedefinieerd zijn hebben een globale scope.

Dit betekent dat lokale variabelen alleen binnen de functie waarin ze gedeclareerd zijn benaderd kunnen worden, terwijl globale variabelen door het hele programbody door alle functies benaderd kunnen worden. Wanneer je een functie aanroept, worden de variabelen die erin gedeclareerd zijn in scope gebracht. Hier is een simpel voorbeeld:

#!/usr/bin/python
total = 0  # Dit is een globale variabele
# Functiedefinitie hier
def sum(arg1, arg2):
    # Tel beide parameters op en retourneer ze
    total = arg1 + arg2  # Hier is total een lokale variabele
    print "Binnen de functie lokale total: ", total
    return total
# Nu roep sum-functie aan
sum(10, 20)
print "Buiten de functie globale total: ", total

Wanneer de bovenstaande code wordt uitgevoerd, produceert dit het volgende resultaat:

Binnen de functie lokale total: 30
Buiten de functie globale total: 0

Python

  1. 10 Essentiële Insight-functies voor het optimaliseren van Stratasys FDM-printen
  2. C++ Functies Uitgelegd met Praktische Codevoorbeelden
  3. Python Lambda Functies: Een praktische gids voor anonieme functies
  4. Python-generators: efficiënte iteratie en geavanceerde use cases
  5. Python-closures uitgelegd: hoe geneste functies variabelen vangen
  6. Python-decorators beheersen: functies verbeteren met expert-technieken
  7. Python's strip()-methode beheersen: Uitgebreide handleiding & praktische voorbeelden
  8. Python lambda-functies beheersen: praktische voorbeelden & best practices
  9. Python abs()-functie: absolute waarden berekenen voor getallen & complexe getallen
  10. Python round()-functie uitgelegd met praktische voorbeelden
  11. Python's map()-functie beheersen: syntaxis, voorbeelden en best practices