Anfängerfrage: Bedeutung von \ in der Dokumentation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EmKay
User
Beiträge: 4
Registriert: Mittwoch 23. Oktober 2024, 07:47

Vielen Dank für die Aufnahme.

Seit Wochenanfang beschäftige ich mich Python. Gerade wird in dem Buch das Thema Zahlensysteme besprochen. Bei der Instanziierung von int können ein Anfangswert und ein Zahlensystem übergegeben werden.

Code: Alles auswählen

class int(number=0, /)
class int(string, /, base=10)
Mich verwirt die Angabe von /. Zur Bedeutung habe ich bisher nichts gefunden. Gerne möchte ich die Dokumentation verstehen. Warum wurde hier / mit angegeben. Wenn int('6', 6) ausreichend ist?
Benutzeravatar
sparrow
User
Beiträge: 4591
Registriert: Freitag 17. April 2009, 10:28

Vorsicht vor den Details. Der Backslash ( \ ), den du in deinem Topic-Titel verwendest ist etwas anderes als der Slash ( / ) der tatsächlich im Code auftaucht.

Ich denke auch nicht, dass der Code, den du hier präsentierst tatsächlich richtig ist.
Das steht exakt so in deinem Lehrbuch? Mit dem class Keyword vorweg?!

Es gibt zwei "special characters" in Parameterlisten von Funktionen/Methoden (und das kann auch die __init__-Methode einer Klasse sein):

/: Links davon stehen "positional arguments" (diese können nicht über den Namen übergeben werden) und rechts "positional arguments" oder "keyword arguments".
*: Links stehen "positional arguments" oder "keyword arguments" und rechts nur "keyword arguments" (diese können ausschließlich über ihren Namen übergeben werden).

Code: Alles auswählen

>>> def slash(a, /, b):
...     print(a, b)
...
>>> slash(1, 2)
1 2
>>> slash(1, b=2)
1 2
>>> slash(a=1, b=2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: slash() got some positional-only arguments passed as keyword arguments: 'a'
>>> def asterisk(a, *, b):
...     print(a, b)
...
>>> asterisk(1, b=2)
1 2
>>> asterisk(a=1, b=2)
1 2
>>> asterisk(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: asterisk() takes 1 positional argument but 2 were given
>>>
Benutzeravatar
DeaD_EyE
User
Beiträge: 1297
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Den "/" gab es zuerst nur in der Dokumentation.
Module, die in C geschrieben worden sind, haben mit dem "/" markiert, dass keine positionsabhängige Argumente mehr folgen.
Dann wurde es irgendwann im Python-Standard aufgenommen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 14237
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@EmKay: Wobei ``/`` bei in Python geschriebenen Funktionen/Methoden eigentlich keinen Sinn macht. Für C wurde das gebraucht, weil man bei entsprechenden Funktionen/Methoden die Argumente vor dem ``/`` nicht als Schlüsselwortargumente angeben konnte, wenn der C-Code das technisch nicht unterstützt hat. Da hätte man extra Code für schreiben müssen. Bei in Python geschriebenen Funktionen/Methoden geht das technisch aber immer.

Der Datentyp `int` ist in CPython in C implementiert.

Die Bedeutung findet man übrigens in der Python-Dokumentation. Die HTML-Version hat auf fast jeder Seite oben rechts einen Link zum Index. Dort dann „Symbols“ und unter dem Eintrag für `/ (slash)` findet man function definition und da dann unter anderem die Erklärung was ``*`` und ``/`` allein stehend in einer Parameterliste bedeuten.

Wenn es um Syntax oder Namen aus der Standardbibliothek geht, findet man über den Index meistens recht gezielt die relevante(n) Stelle(n) in der Dokumentation.
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
EmKay
User
Beiträge: 4
Registriert: Mittwoch 23. Oktober 2024, 07:47

sparrow hat geschrieben: Freitag 25. Oktober 2024, 08:19 Vorsicht vor den Details. Der Backslash ( \ ), den du in deinem Topic-Titel verwendest ist etwas anderes als der Slash ( / ) der tatsächlich im Code auftaucht.
Da hat sich ein Tippfehler eingeschlichen. Gemeint ist der Slash
sparrow hat geschrieben: Freitag 25. Oktober 2024, 08:19 Ich denke auch nicht, dass der Code, den du hier präsentierst tatsächlich richtig ist.
Das steht exakt so in deinem Lehrbuch? Mit dem class Keyword vorweg?!
Den Code habe ich so von der Python-Dokumentationsseite übernommen. int

Vielen Dank für Eure ausführlichen Antworten. Meine Frage ist damit beantwortert.
Antworten