Callables und andere Internals

Alles die Wrapper-Methode call implementiert ist ein “callable”:

print(len)
print(len.__call__)
<built-in function len>
<method-wrapper '__call__' of builtin_function_or_method object at 0x101a830d8>
print(enumerate)
print(enumerate.__call__)
<class 'enumerate'>
<method-wrapper '__call__' of type object at 0x1018c6cd0>
import datetime
print(datetime.datetime(2020, 1, 1, 0, 0))
2020-01-01 00:00:00

Ein Callable wird meistens mit Klammerpaar und/oder Parametern aufgerufen.

wt = ['Montag',
      'Dienstag',
      'Mittwoch',
      'Donnerstag',
      'Freitag',
      'Sonnabend',
      'Sonntag']
for i in wt:
    print(i)
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Sonnabend
Sonntag
print(enumerate.__call__)
for idx, value in enumerate(wt):
    print(idx, value)
<method-wrapper '__call__' of type object at 0x1018c6cd0>
0 Montag
1 Dienstag
2 Mittwoch
3 Donnerstag
4 Freitag
5 Sonnabend
6 Sonntag
isinstance(len, object)
True
type(len)
builtin_function_or_method
isinstance(range, object)
True
isinstance(range(5), object)
True
def gruss(name="zusammen"):
    """ Gruessen mit und ohne Hallo """
    print(f"Hallo {name}!")

gruss("Peter")
gruss()
Hallo Peter!
Hallo zusammen!
gruss.__doc__
' Gruessen mit und ohne Hallo '

Summen-Funktion I

def summe(a, b, c=0, d=0):
    """Eine Funktion summe im Eigenbau"""
    return a + b + c + d

print(summe(12,4))
print(summe(42,15,d=10))
16
67
def summerator(*args):
    """Summe mit beliebig vielen Argumenten"""
    print(*args)
    summe = 0
    for x in args:
        summe += x
    return summe

print(summerator(2,4,6))
2 4 6
12

Summen-Funktion II (build-in)

print(sum((12,4)))
print(sum((2,4,6)))
print(sum(range(100)))
print("*" * 40)
print(help(sum))
16
12
4950
************************************
Help on built-in function sum in module builtins:

sum(iterable, start=0, /)
    Return the sum of a 'start' value (default: 0) plus an iterable of numbers

    When the iterable is empty, return the start value.
    This function is intended specifically for use with numeric values and may
    reject non-numeric types.

None
def dictionator(**kwargs):
    print(kwargs)
dict = {'1':2, '3':5, '6':9}
dictionator(**dict)
{'1': 2, '3': 5, '6': 9}
def alleskoenner(a=None, *args, **kwargs):
    print(a)
    print(*args)
    print(**kwargs)
alleskoenner(dict)
alleskoenner((1,2,3,4))
alleskoenner("tester")
{'1': 2, '3': 5, '6': 9}


(1, 2, 3, 4)


tester