Python kwargs – Python Funktions Parameter

Python kwargs – keyword arguments

Python Funktionen enthalten in der Regel Parameter. Meistens werden neben den normalen Parametern auch Parameter, die einen Standardwert bzw default bereits in der Funktionsdefinition enthalten, benutzt.

Positionsgebunden oder über Schlüsselwort

Ein einfaches Beispiel:

def welcome(first_name, last_name="Last Name"):
    print(first_name, last_name)

Die Funktion welcome besitzt zwei Parameter: first_name und last_name

Der zweite Parameter last_name hat per Funktionsdefinition bereits einen Standardwert zugewiesen bekommen. Wird nun beim Funktionsaufruf das Argument für last_name weggelassen, so wird dem Parameter automatisch der Standartwert zugewiesen. Andernfalls benutzt der Interpreter das entsprechende Argument.

>>> welcome("Christian") 
Christian Last Name 
>>> welcome("Christian", last_name="Scholz") 
Christian Scholz
„Python kwargs – Python Funktions Parameter“ weiterlesen

Python Parameter Typen

Python Parameter Typen können seit der Version 3.5 in einer Funktion angegeben werden. Man kann also in der Funktion bereits definieren, dass ein Parameter z.B. vom Typ float ist. Genauso können auch die Rückgabewerte der Funktion definiert werden.

Ein einfaches Beispiel aus der aktuellen Python 3.7 Dokumentation zu Type aliases :

from typing import List
Vector = List[float]
 
def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]
 
# typechecks; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4])

In dem oben geziegten Code Ausschnitt importieren wir zunächst den Typ ‚List‘. Diesen benutzen wir anschließend, um einen neuen Typ ‚Vector‘ zu definieren. Vector ist dabei ein Alias für eine Liste von float Werten.

„Python Parameter Typen“ weiterlesen

Python *args **kwargs – Funktionen mit variabler Parameter Anzahl

Parameter in Python

Meistens verwendet man in Funktionen und Methoden von Python eine ganz konkrete Anzahl von Parametern. Ich halte das für die verständlichste und sauberste Art und Weise eine Funktion zu beschreiben. Jemand der diese Funktionen benutzen möchte, weiß somit, wie diese konkret anzusprechen sind und im Idealfall, welche Typen bzw Objekte an welcher Position zu übergeben sind oder welche Parameter optional (default parameter values, bzw Standardparameter oder voreingestellter Parameter) übergeben werden können.

Hier findet man die genaue Definition für Parameter bzw Argumente: https://docs.python.org/3/glossary.html#term-argument

Ein einfaches Beispiel mit festen positionsbezogenen Parametern (positional arguments) und voreingestellten Parametern (keyword arguments):

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
 
def main(a_string, an_int, a_bool=True, a_float=1.0):
    """
    this is the main function, it combines all given parameters and prints its values
 
    :param a_string: a string parameter (as first argument)
    :param an_int: an integer parameter (as second argument)
    :param a_bool: an optional boolean parameter (as keyword argument)
    :param a_float: an optional float parameter (as keyword argument)
    """
    print(a_string, an_int, a_bool, a_float)
 
 
if __name__ == "__main__":
    main("only arguments", 1337)
    main("arguments and keywords", 1337, a_bool=False, a_float=1.23)
    main("arguments and keywords not sorted", 1337, a_float=1.23, a_bool=False)
    main("arguments and some keywords", 1337, a_float=2.34)
    main("argument and one argument keyworded", an_int=1337, a_bool=False)
    main(1337, "argument type does not matter", "T", False)
    main("this will fail")

Führt man dieses einfache Script aus, so ergibt sich folgende Ausgabe:

$ ./simple.py 
('only arguments', 1337, True, 1.0)
('arguments and keywords', 1337, False, 1.23)
('arguments and keywords not sorted', 1337, False, 1.23)
('arguments and some keywords', 1337, True, 2.34)
('argument and one argument keyworded', 1337, False, 1.0)
(1337, 'argument type does not matter', 'T', False)
Traceback (most recent call last):
  File "./simple.py", line 24, in <module>
    main("this will fail")
TypeError: main() takes at least 2 arguments (1 given)
„Python *args **kwargs – Funktionen mit variabler Parameter Anzahl“ weiterlesen