zusätzliche Spaces bei Dictionary

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
PaddyRT
User
Beiträge: 19
Registriert: Samstag 27. November 2021, 15:25

Hallo,

mit meinem Code möchte ich abhängig vom Hostname verschiedene Befehle ausführen. Hierzu wollte ich zum für mich ersten Mal ein Dictionary verwenden. Wenn ich jedoch über den Key den Value ausgeben lasse, dann erhalte ich am Anfang und am Ende des eigentlichen Wertes ein Space. Bisher finde ich im Web zwar Möglichkeiten, den Space zu entfernen, aber ich fände es hilfreich zu verstehen, weshalb die Spaces dort sind.

Mein Code:

Code: Alles auswählen

#!/usr/bin/env python3

import socket

targets = {'test' : ['bash','healing','sound'], \
'laptop' : ['bash','eins'], \
'euler' : ['bash','zwei'], \
'kreiszahl' : ['bash','drei']}

myhost = socket.gethostname()

print('targets: ',targets[myhost])
for target in targets[myhost]:
    print('|',target,'|')
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Das liegt daran, dass du print mehrere Objekte zur Ausgabe übergibt. Das lässt sich über das sep-Argument steuern. Standard ist ein Leerzeichen.

Code: Alles auswählen

a = "foo"
b = "bar"
print(a, b)
print(a, b, sep="|")
print(f"{a}{b}")
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@PaddyRT: Du musst hier ein paar Dinge utnerscheiden. einfachTobi hat recht: Die Leerzeichen kommen daher, dass du mehrere Parameter an print übergibst. Auch wenn er es nicht in seinem Post explizit erwähnt aber durchaus gezeigt hat: Verwende f-Strings um Zeichenketten zu formatieren.
PaddyRT
User
Beiträge: 19
Registriert: Samstag 27. November 2021, 15:25

Ich habe mal in einem öffentlichen Beispiel Programm einen f-String verwendet weil sie mir eigentlich gefallen, aber das Feedback war mehrfach, dass ich sie vermeiden soll. Die Erklärungen habe ich nicht wirklich verstanden und vermutlich auch deshalb wieder vergessen.
PaddyRT
User
Beiträge: 19
Registriert: Samstag 27. November 2021, 15:25

einfachTobi hat geschrieben: print(a, b, sep="|")
So eine kleine Modifikation die aber einen großen Unterschied macht. Vielen Dank!
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Backslash als Zeilenfortsetzungszeichen sollte man vermeiden, ist hier auch gar nicht nötig, weil die Klammern die Fortsetzung schon klar machen.
Ein my-Präfix an einer Variable ist nie sinnvoll und kann ersatzlos gestrichen werden.

Code: Alles auswählen

#!/usr/bin/env python3

import socket

targets = {
    'test': ['bash', 'healing', 'sound'],
    'laptop': ['bash', 'eins'],
    'euler': ['bash', 'zwei'],
    'kreiszahl': ['bash', 'drei'],
}

hostname = socket.gethostname()

print('targets: ', targets[hostname])
for target in targets[hostname]:
    print(f'|{target}|')
PaddyRT
User
Beiträge: 19
Registriert: Samstag 27. November 2021, 15:25

Sirius3 hat geschrieben: Backslash als Zeilenfortsetzungszeichen sollte man vermeiden [...]
Weshalb?

Die anderen Punkte nehme ich mal so an, obwohl ich den Backslash, die Variablen Namen und die Formattierung zu meiner eigenen Lesbarkeit in der Form verwendet habe. Beim nächsten Posting könnte ich das aber ändern.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du die beiden Varianten vergleichst, ist doch die ohne Backslash deutlich lesbarer. Das eigentliche Problem ist aber, dass der Backslash wirklich das letzte Zeichen in der Zeile sein muß, und schon ein Leerzeichen zu einem Syntaxfehler führt. Zumal man das durch Klammern ganz einfach umgehen kann.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Zudem die Baschlash hier auch völlig überflüssig sind.
PaddyRT hat geschrieben: Donnerstag 8. Dezember 2022, 20:38Ich habe mal in einem öffentlichen Beispiel Programm einen f-String verwendet weil sie mir eigentlich gefallen, aber das Feedback war mehrfach, dass ich sie vermeiden soll.
Das ist falsch.
Antworten