Zuweisungen von Funktionen in Python (Zuweisungen von Funktionen in Python), Lektion, Seite 724045
https://www.purl.org/stefan_ram/pub/zuweisungen_von_funktionen_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Bindungen und Standardnamen in Python 

Unter einem Standardnamen  verstehen wir hier einen Namen wie »print«, der von der Standardbibliothek von Python  definiert wurde.

Ein Standardobjekt  ist ein Objekt, das normalerweise an einen Standardnamen gebunden ist.

Importe

Die Definition eines Namens durch einen Import ähnelt der Bindung eines Namens durch eine Bindungsanweisung.

Protokoll

from math import pi

pi

3.141592653589793

pi = 2

pi

2

from math import pi

pi

3.141592653589793

Bindungen an Standardobjekte

Das folgende Beispiel zeigt die Bindung einer Funktion an einen neuen Namen »zufallszahl«. Danach kann der neue Name »zufallszahl« wie der bisherige Name »random« verwendet werden.

Protokoll

from random import random

random()

0.2682902927332

zufallszahl = random

zufallszahl()

0.4239720342875

Dunder -Namen

Dunder -Namen wie »__name__«, die mit zwei Grundstrich »_« beginnen und enden, sind Namen, die von Python  für spezielle Zwecke reserviert wurden. Ihre Bindung sollte nur verändert werden, wenn man ihre spezielle Bedeutung auch kennt und versteht.

(Der Name »_« darf jedoch umdefiniert werden. Allerdings wird er von der Konsole immer mit dem Ergebnis der letzten Auswertung einer Eingabe überschrieben.)

Das Umdefinieren von Standardnamen

Programmierer erwarten normalerweise, daß bekannten Namen, wie »print«, eine bestimmte Bedeutung  haben.

Tatsächlich können all diese Namen aber an beliebige Objekte gebunden werden.

Protokoll
print( 2 )
2

random = print

print = 2

print( 2 )

TypFehler: ein int-Objekt ist nicht aufrufbar

random( 2 )

2
print
2

Insofern hat es eigentlich keinen Sinn von „der Funktion ›print‹“ zu sprechen, denn an den Namen »print« kann irgendein beliebiges  Objekt gebunden worden sein.

Durch das Löschen des Eintrags in der Bindungstabelle unseres Moduls kann die Python -Sitzung aber wieder repariert werden.

Protokoll

del print

print

<built-in function print>

Auch ein Name, der normalerweise für eine Klasse steht, kann umgebunden werden.

Protokoll (übersetzt)
str
<class 'str'>

str = 'a'

str

'a'

Wenn man eine merkwürdige Fehlermeldung erhält, sollte man prüfen, ob man versehentlich einen Standardnamen umgebunden hat!

Beispielsweise will man eine Variable für einen „String“ definieren, und als Name der Variablen fällt einem »str« ein. Man denkt in diesem Moment vielleicht nicht daran, daß »str« ja der Name der Klasse für Zeichenfolgen ist und sein sollte.

Wir gehen in diesem Kurs in der Regel davon aus, daß bekannte (berühmte) Namen, wie »print«, oder Namen aus einem gerade verwendeten Modul die Bindung haben, die sie direkt nach dem Start  der Python -Implementation (und nach einem eventuellen Import des Namens aus seinem Modul) haben.

Im speziellen Falle von Namen aus dem Modul »builtins« kann eine Umdefinition auch durch Löschen  der neuen Definition verdeckt werden, da diese Neudefinition einen Namen im Modul »__main__« erzeugte, nach dessen Löschen durch weiterhin im Modul »builtins« vorhandene Namen wieder sichtbar wird, der die ganze Zeit unverändert existiert hat.

Protokoll

print = 2

print( 2 )

TypeError: 'int' object is not callable

del print

print( 2 )

2

Schlüsselwörter

Die Schlüsselwörter »True«, »False« und »None« sind ebenfalls Namen, aber können nicht  neu gebunden werden, da sie Schlüsselwörter sind.

Protokoll (teilweise übersetzt)

True = 5

SyntaxError: Bindung an Schlüsselwörter nicht möglich

Zitate zu Themen dieser Lektion ⃗

The Python Language Reference, Release 3.8.0a0

2.3.2 Reserved classes of identifiers

Certain classes of identifiers (besides keywords) have special meanings. These classes are identified by the
patterns of leading and trailing underscore characters:

_* Not imported by from module import *. The special identifier _ is used in the interactive interpreter
to store the result of the last evaluation; it is stored in the builtins module. When not in interactive
mode, _ has no special meaning and is not defined. See section The import statement.

Note: The name _ is often used in conjunction with internationalization; refer to the documentation
for the gettext module for more information on this convention.

__*__ System-defined names. These names are defined by the interpreter and its implementation (including
the standard library). Current system names are discussed in the Special method names section and
elsewhere. More will likely be defined in future versions of Python. Any use of __*__ names, in any
context, that does not follow explicitly documented use, is subject to breakage without warning.

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724045 stefan_ram:724045 Zuweisungen von Funktionen in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724045, slrprddef724045, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/zuweisungen_von_funktionen_python