Allgemeine Fragen

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
alsaf
User
Beiträge: 3
Registriert: Sonntag 11. August 2019, 12:39

Hallo,
ich habe vor Kurzem angefangen mich mit Python zu beschäftigen. Und hätte da ein paar Fragen.

1. Was ist der Unterschied zwischen dem Begriff Objekttyp und Datentyp?

Grundlegend gibt es doch Objekte die aus eine Gruppe von Objekten bestehen z.B. strings, lists und solche die aus einzelnen Objekten bestehen z.B. integers,floats? Und was ist dann der Datentyp?

2. Warum gibt es den Datentyp byte für strings?

3. Warum wird wenn man beim Entpacken eines Tupels die restlichen Elemente einer Variable mit * zuweist und diese dann diese Variable ausdruckt, diese als Liste dargestellt (und nicht als Tupel) und wenn man beim Ausdruck die Variable mit * verwendet nur die einzelnen Elemente? Und was genau verursacht die Platzierung eines * vor einer Variable beim Ausdruck?
Bsp.
cities="rom","neapel","london","paris"
*it,uk,fr=cities
print(it,uk,fr)
print(*it,uk,fr)
print(it,uk,*fr)

4. Was versteht man unter:
a=12
b =15
c= 22
a, b, c = c, a, a+b
print("Auswirkung:", a, b, c)

Man kann erkennen, dass die Änderung eines Variablenwerts keine
Auswirkungen innerhalb der gleichen Mehrfachzuweisung hat:
Die Variable a erhält den alten (und neuen) Wert von c (= 22)
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ad 1. Datentyp und Objekttyp ist das gleiche. Denn der Typ von einem Objekt ist ja der Datentyp. In Python ist auch Klasse und Datentyp synonym weil in Python mittlerweile alles ein Objekt ist und jedes Objekt eine Klasse als Datentyp hat. Den Typ eines Objekts kann man mit der Funktion `type()` ermitteln.

Der Typ von einer Liste ist `list`. Welche Objekte darin enthalten sind hat darauf keinen Einfluss. Man kann ja auch völlig beliebige Objekte darin speichern. Man kann natürlich trotzdem sagen, und dokumentieren, man hat eine Liste mit ganzen Zahlen, wenn man nur ganze Zahlen darin speichern will. Das wird halt von Python nicht erzwungen.

Ad 2. Die Frage verstehe ich nicht so ganz. Es gibt den Datentyp `bytes` für Bytes. Für Strings/Zeichenketten gibt es den Datentyp `str`. `bytes`-Literale werden so ähnlich wie Zeichenketten repräsentiert, weil solange es sich nur oder überwiegend um Bytewerte im ASCII-Wertebereich handelt, kann es Sinn machen das als Zeichen anzuzeigen wenn die Bytedaten tatsächlich (überwiegend ASCII-)Text enthalten. Was bei textbasierten Kommunikationsprotokollen häufig der Fall ist. Wenn es sich um beliebige Binärdaten handelt, dann ist die literale Darstellung von `bytes`-Objekten zumindest eindeutig.

Ad 3. Tupel werden da nicht anders behandelt als andere Werte. Bei der Zuweisung ``*it,uk,fr=cities`` muss `cities` ja kein Tupel sein – da kann ein beliebiges iterierbares Objekt zugewiesen werden. Also auch Werte die keine ermittelbare Länge haben. Der Code der da abläuft sammelt also alle Elemente in einer Liste, weil das die Grunddatenstruktur ist, die sich für das sammeln von einer vorher unbekannten Anzahl von Elementen am besten eignet.

Was beim ``*`` passiert *siehst* Du doch am Ergebnis. Und das Sternchen bei der Zuweisung bedeutet etwas anders als beim Funktionsaufruf.

Ad 4. Schreib die Mehrfachzuweisung einfach mal mit einfachen Zuweisungen. Bei Zuweisungen – auch bei Mehrfachzuweisungen – wird erst die komplette rechte Seite der Zuweisung ausgewertet, bevor die Werte den Namen auf der linken Seite zugewiesen werden.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
alsaf
User
Beiträge: 3
Registriert: Sonntag 11. August 2019, 12:39

Danke, mir ist nur noch nicht klar, warum man Zeichenketten auch als Binärdaten darstellt. Welche Anwendungen gibt es. Sorry ich bin ein bisschen verwirrt.
Ich hätte noch ein paar Fragen.
1. Was ist der Unterschied zwischen exec() und eval() und wie kann man mit exec() nud in input mehrleinigen Code übersetzen?
2. Warum sind alle Arguemnte nach default arguments, default argumetns, bzw. warum können danach keine positional arguemtsn stehen?
3. Warum können keyword arguments nicht vor psoitonal arguments kommen?
4. Wie wird ein leerer input itnerpretiert?
def greeting(name,msg="How are you"):
print("Hello",name,msg)
name=input("name: ")
msg=input("question: ")
5. Was versteht man unter:
'=' Die Auffüllzeichen (padding characters) werden zwischen Vorzeichen, falls ein Vorzeichen ausgegeben wird und dem eigentlichen Beginn der Ziffern einer Zahl eingeführt. Damit können Felder der Art "+000000120" ausgegeben werden. Diese Ausrichtungsoption kann nur auf numerische Werte angewendet werden.
6. Was versteht man unter:
inerhalb eines Moduls ist der Modulname als __name__ verfügbar (globale Variable des Typs String).
https://py-tutorial-de.readthedocs.io/d ... dules.html
6. Wie kann man auf Variabeln inerhalb eines importierten Moduls zurückgreifen und diese ändern?
7. Welche Bedeutung haben mit zwei einrahmende Unterstriche?
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Willst Du einen Python-Interpreter schreiben? Oder warum die ganzen Fragen?

Zu 1) man braucht normalerweise weder exec noch eval. Warum brauchst Du das?
Zu 2) Wie soll denn das aussehen, wenn man das dritte Argument wegläßt, aber das vierte setzt? Weil Position 4 rückt dann ja auf Position 3.
Zu 3) siehe 2.
Zu 4) probier es aus.
Zu 5) probier es doch aus.
Zu 6) gib doch einfach mal __name__ aus.
Zu 6) Variablen auf Modulebene wären ja globale Variablen und die sollte es nicht geben.
Zu 7) gar keine, außer dass das meist Namen mit spezieller Bedeutung sind.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@alsaf: Wie willst Du Zeichenketten ausserhalb eines Programms, also beispielsweise in Dateien sonst darstellen als mit Bytes? Was anderes kann der Rechner da nicht. Und auch im Speicher steht hinter einer Zeichenkette wie bei allen anderen Werten letztlich eine irgendwie geartetete Binärdarstellung als Bytes.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten