Python - funkcje

Funkcja to blok zorganizowanego kodu wielokrotnego użytku, który służy do wykonywania jednej, powiązanej czynności. Funkcje zapewniają lepszą modułowość aplikacji i wysoki stopień ponownego wykorzystania kodu.

Jak już wiesz, Python oferuje wiele wbudowanych funkcji, takich jak print () itp., Ale możesz także tworzyć własne funkcje. Te funkcje są nazywane funkcjami zdefiniowanymi przez użytkownika.

Definiowanie funkcji

Możesz zdefiniować funkcje, aby zapewnić wymaganą funkcjonalność. Oto proste zasady definiowania funkcji w Pythonie.

  • Bloki funkcyjne zaczynają się od słowa kluczowego def po którym następuje nazwa funkcji i nawiasy (()).

  • Wszelkie parametry wejściowe lub argumenty należy umieścić w tych nawiasach. Możesz także zdefiniować parametry w tych nawiasach.

  • Pierwsza deklaracja funkcji może być opcjonalnie zestawienie - ciąg dokumentacja funkcji lub docstring .

  • Blok kodu w każdej funkcji zaczyna się od dwukropka (:) i jest wcięty.

  • Instrukcja return [wyrażenie] kończy funkcję, opcjonalnie przekazując wyrażenie z powrotem do wywołującego. Instrukcja return bez argumentów jest tym samym, co instrukcja return None.

Składnia

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

Domyślnie parametry zachowują się pozycyjnie i należy je informować w tej samej kolejności, w jakiej zostały zdefiniowane.

Przykład

Następująca funkcja przyjmuje ciąg jako parametr wejściowy i drukuje go na standardowym ekranie.

def printme( str ):
   "This prints a passed string into this function"
   print str
   return

Wywołanie funkcji

Zdefiniowanie funkcji tylko nadaje jej nazwę, określa parametry, które mają być zawarte w funkcji i strukturyzuje bloki kodu.

Po sfinalizowaniu podstawowej struktury funkcji można ją wykonać, wywołując ją z innej funkcji lub bezpośrednio z zachęty Pythona. Poniżej znajduje się przykład wywołania funkcji printme () -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")

Wykonanie powyższego kodu daje następujący wynik -

I'm first call to user defined function!
Again second call to the same function

Przekaż przez odniesienie a wartość

Wszystkie parametry (argumenty) w języku Python są przekazywane przez odniesienie. Oznacza to, że jeśli zmienisz to, do czego odnosi się parametr w funkcji, zmiana ta będzie również odzwierciedlać z powrotem w funkcji wywołującej. Na przykład -

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist.append([1,2,3,4]);
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Tutaj utrzymujemy odniesienie do przekazanego obiektu i dołączamy wartości w tym samym obiekcie. To dałoby następujący wynik -

Values inside the function:  [10, 20, 30, [1, 2, 3, 4]]
Values outside the function:  [10, 20, 30, [1, 2, 3, 4]]

Jest jeszcze jeden przykład, w którym argument jest przekazywany przez referencję, a referencja jest nadpisywana wewnątrz wywoływanej funkcji.

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4]; # This would assig new reference in mylist
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Parametr mylist jest lokalny dla funkcji changeme. Zmiana mylisty w ramach funkcji nie wpływa na mylistę . Funkcja nic nie robi i ostatecznie dałaby następujący wynik -

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

Argumenty funkcji

Możesz wywołać funkcję, używając następujących typów argumentów formalnych -

  • Wymagane argumenty
  • Argumenty słów kluczowych
  • Domyślne argumenty
  • Argumenty o zmiennej długości

Wymagane argumenty

Wymagane argumenty to argumenty przekazywane do funkcji w prawidłowej kolejności pozycyjnej. W tym przypadku liczba argumentów w wywołaniu funkcji powinna dokładnie odpowiadać definicji funkcji.

Aby wywołać funkcję printme () , zdecydowanie musisz przekazać jeden argument, w przeciwnym razie wyświetli się następujący błąd składni -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme()

Wykonanie powyższego kodu daje następujący wynik -

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

Argumenty słów kluczowych

Argumenty słów kluczowych są powiązane z wywołaniami funkcji. Gdy używasz argumentów słów kluczowych w wywołaniu funkcji, obiekt wywołujący identyfikuje argumenty za pomocą nazwy parametru.

Pozwala to na pominięcie argumentów lub umieszczenie ich w niewłaściwej kolejności, ponieważ interpreter Pythona jest w stanie użyć podanych słów kluczowych, aby dopasować wartości do parametrów. Możesz również wywoływać słowa kluczowe do funkcji printme () w następujący sposób -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme( str = "My string")

Wykonanie powyższego kodu daje następujący wynik -

My string

Poniższy przykład daje bardziej przejrzysty obraz. Zauważ, że kolejność parametrów nie ma znaczenia.

#!/usr/bin/python

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )

Wykonanie powyższego kodu daje następujący wynik -

Name:  miki
Age  50

Domyślne argumenty

Argument domyślny to argument, który przyjmuje wartość domyślną, jeśli wartość nie jest podana w wywołaniu funkcji dla tego argumentu. Poniższy przykład daje pomysł na domyślne argumenty, wyświetla domyślny wiek, jeśli nie jest przekazywany -

#!/usr/bin/python

# Function definition is here
def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )

Wykonanie powyższego kodu daje następujący wynik -

Name:  miki
Age  50
Name:  miki
Age  35

Argumenty o zmiennej długości

Może być konieczne przetworzenie funkcji dla większej liczby argumentów niż określono podczas definiowania funkcji. Argumenty te nazywane są argumentami o zmiennej długości i nie są nazywane w definicji funkcji, w przeciwieństwie do argumentów wymaganych i domyślnych.

Składnia funkcji z argumentami zmiennymi niebędącymi słowami kluczowymi jest następująca -

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

Gwiazdka (*) jest umieszczana przed nazwą zmiennej, która zawiera wartości wszystkich argumentów zmiennych niebędących słowami kluczowymi. Ta krotka pozostaje pusta, jeśli podczas wywołania funkcji nie zostaną określone żadne dodatkowe argumenty. Oto prosty przykład -

#!/usr/bin/python

# Function definition is here
def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print "Output is: "
   print arg1
   for var in vartuple:
      print var
   return;

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

Wykonanie powyższego kodu daje następujący wynik -

Output is:
10
Output is:
70
60
50

W anonimowych Funkcje

Funkcje te nazywane są anonimowymi, ponieważ nie są deklarowane w standardowy sposób za pomocą słowa kluczowego def . Możesz użyć słowa kluczowego lambda do tworzenia małych anonimowych funkcji.

  • Formy lambda mogą przyjmować dowolną liczbę argumentów, ale zwracają tylko jedną wartość w postaci wyrażenia. Nie mogą zawierać poleceń ani wielu wyrażeń.

  • Funkcja anonimowa nie może być bezpośrednim wywołaniem drukowania, ponieważ lambda wymaga wyrażenia

  • Funkcje lambda mają własną lokalną przestrzeń nazw i nie mogą uzyskać dostępu do zmiennych innych niż te na ich liście parametrów i te w globalnej przestrzeni nazw.

  • Chociaż wydaje się, że wyrażenia lambda są jednowierszową wersją funkcji, nie są one równoważne instrukcjom wbudowanym w C lub C ++, których celem jest przekazywanie alokacji stosu funkcji podczas wywołania ze względu na wydajność.

Składnia

Składnia funkcji lambda zawiera tylko jedną instrukcję, która jest następująca -

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

Poniżej znajduje się przykład pokazujący, jak działa forma funkcji lambda -

#!/usr/bin/python

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

Wykonanie powyższego kodu daje następujący wynik -

Value of total :  30
Value of total :  40

Zwrotny komunikat

Instrukcja return [wyrażenie] kończy funkcję, opcjonalnie przekazując wyrażenie z powrotem do wywołującego. Instrukcja return bez argumentów jest tym samym, co instrukcja return None.

Wszystkie powyższe przykłady nie zwracają żadnej wartości. Możesz zwrócić wartość z funkcji w następujący sposób -

#!/usr/bin/python

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print "Inside the function : ", total
   return total;

# Now you can call sum function
total = sum( 10, 20 );
print "Outside the function : ", total

Wykonanie powyższego kodu daje następujący wynik -

Inside the function :  30
Outside the function :  30

Zakres zmiennych

Wszystkie zmienne w programie mogą nie być dostępne we wszystkich lokalizacjach w tym programie. To zależy od tego, gdzie zadeklarowałeś zmienną.

Zakres zmiennej określa część programu, w której można uzyskać dostęp do określonego identyfikatora. W Pythonie istnieją dwa podstawowe zakresy zmiennych -

  • Zmienne globalne
  • Zmienne lokalne

Zmienne globalne a zmienne lokalne

Zmienne zdefiniowane w treści funkcji mają zasięg lokalny, a te zdefiniowane na zewnątrz mają zasięg globalny.

Oznacza to, że dostęp do zmiennych lokalnych można uzyskać tylko wewnątrz funkcji, w której są zadeklarowane, natomiast do zmiennych globalnych można uzyskać dostęp w całym ciele programu przez wszystkie funkcje. Kiedy wywołujesz funkcję, zmienne zadeklarowane w niej są przenoszone do zakresu. Oto prosty przykład -

#!/usr/bin/python

total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print "Inside the function local total : ", total
   return total;

# Now you can call sum function
sum( 10, 20 );
print "Outside the function global total : ", total

Wykonanie powyższego kodu daje następujący wynik -

Inside the function local total :  30
Outside the function global total :  0