[Python-de] Re: for unpacking

[email protected] (Stefan Ram) 11 Aug 2024 13:48:41 GMT
Newsgroups gmane.comp.python.general.german
Organization Stefan Ram
Message-ID <[email protected]>
"Peter J. Holzer" <[email protected]> schrieb oder zitierte:
>On 2024-08-11 10:46, Stefan Ram <[email protected]> wrote:
>>"Zeiger" gibt es in C.
>"Zeiger" ist ein programiersprachenübergreifendes Konzept.

  Die Vorstellung einer programiersprachenübergreifenden Terminologie
  führt immer wieder zu Begriffsverwirrungen. Letztendlich definiert
  jede Programmiersprache ihre eigenen Begriffe.

>                                                           Zeiger mögen
>in verschiedenen Programmiersprachen anders genannt werden und leicht
>unterschiedliche Eigenschaften haben (in C kann man z.B. damit rechnen,
>in den meisten anderen Sprachen nicht), aber das Grundkonzept gibt es
>fast überall.

  Zeiger gehören zum Laufzeitmodell, während Namen zum Quelltextmodell
  gehören.

  Das heißt: Ein Zeiger ist ein Wert, der relevant ist, wenn man
  beschreibt, was bei der Ausführung eines Programms passiert.
  Er steht nicht im Quelltext. Ein Name ist umgekehrt etwas das
  im Quelltext steht. Mit dem Begriff "Bindung" drückt man aus,
  daß eine Quelltextentität (Name) mit einer Laufzeit (Objekt)
  verbunden ist. Das ist wie die Beziehung zwischen dem Wort "Tisch"
  und einem Tisch. (Daher spricht man ja auch von "Objekten" als
  das, auf was sich Namen beziehen.)

  Dies waren erst einmal allgemein Überlegungen aus dem Bereich
  der Programmiersprachenterminologie. Hinzu kommt aber noch,
  daß dies auch die Begriff sind, wie sie "The Python Language
  Reference" von Guido van Rossum verwendet.

>>In Python sind Namen an Objekte /gebunden/.
>Das ist der übliche Jargon in Python,

  Das sind die /korrekten Fachbegriffe/ aus "The Python Language
  Reference" von Guido van Rossum und kein "Jargon"!

>ich halte ihn aber aus mehreren Gründen für irreführend:
>1. "Binden" ist ein Verb. Das beschreibt also eine Operation, nämlich
>   genau die, die anderswo in der Dokumentation als "assignmen"
>   (Zuweisung) bezeichnet wird.

  Beim /Binden/ wird, wie ich oben ausgeführt hatte, eine
  Quelltextentität (der Name) mit einer Laufzeitentität (dem
  Objekt) verbunden.

  Bei einer /Zuweisung/ (Begriff aus anderen Programmiersprachen)
  wird ein Wert (eine Laufzeitentität) in einen Wertspeicher
  (ebenfalls eine Laufzeitentität!) geschrieben.

>(Zuweisung) bezeichnet wird. "Gebunden" ("bound") sagt also
>eigentlich nur aus, dass dem Namen bereits irgendetwas zugewiesen
>wurde. Es sagt wenig darüber aus, was das für Folgen hat und was man
>dann damit machen kann.

  Das wird in "The Python Language Reference" ausführlich beschrieben.

>2. "Gebunden" hat keine klare Richtung. Wenn A an B gebunden ist, hängt
>   dann A an B oder B an A oder hängen sie aneinander?

  In Python kann man die Richtung in einem gegebenen Kontext immer
  daran erkennen, daß auf einer Seite ein Name (eine Quelltextentität)
  und auf der anderen Seite ein Objekt (eine Laufzeitentität) steht.

>Ich halte daher die Formulierung "der Name zeigt auf das Objekt" nicht
>für richtig, sondern sogar für besser als "der Name ist an das Objekt
>gebunden", insbesondere dann, wenn man Leuten etwas erklären will, die
>nicht schon seit Jahren auf der Python-Mailinglist subscribiert sind.

  Es ist am besten, wenn man den Menschen hilft, die Begriffe zu
  erlernen, die auch die "The Python Language Reference" verwendet,
  weil sie dann in der Lage sind, selber dort nachzulesen.

>> def f():
>>     Hans = 5
>> def g():
>>     Hans = 6
>Das sind andere Namen. Der Scope gehört zum Namen, auch wenn er nicht
>explizit geschrieben wird.

  "Hans" ist ein anderer Name als "Hans"? Der Gültigkeitsbereich
  gehört zum Namen? Das könnte die Kommunikation mit anderen
  erschweren, wenn man solche Begriffe verwendet!

|When a name is used in a code block, it is resolved using the
|nearest enclosing scope.
The Python Language Reference

>(Das ist ein weiterer Grund, warum ich mit der Bezeichnung "Name"
>unglücklich bin. Damit verbindet man unwillkürlich die Zeichenfolge. Es
>geht aber um die Datenstruktur, die dahintersteckt.)

  Mit "Name" verbindet man nicht "unwillkürlich" die Zeichenfolge,
  sondern der Namen /ist/ genau diese Zeichenfolge:

|An identifier occurring as an atom is a name.
The Python Language Reference

  2.3 definiert dann einen "identifier" als eine Folge von Buchstaben
  (sowie Zeichen wie "_").

  Du kannst natürlich Deine ganz eigene Terminologie aufstellen, die
  von der der "The Python Language Reference" abweicht. Aber damit
  machst Du dir erst einmal viel Arbeit und handelst Dir vielleicht
  Verständigungsprobleme ein. Viel Spaß bei Lesen der "The Python
  Language Reference", wenn Du dann ständig zwischen deren Begriffen
  und Deinen eigenen hin- und herübersetzen mußt!
_______________________________________________
python-de Mailingliste -- [email protected]
Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected]
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: [email protected]