Seite 1 von 1

zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 19:32
von PaddyRT
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,'|')

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 19:46
von einfachTobi
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}")

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 20:13
von sparrow
@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.

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 20:38
von PaddyRT
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.

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 20:40
von PaddyRT
einfachTobi hat geschrieben: print(a, b, sep="|")
So eine kleine Modifikation die aber einen großen Unterschied macht. Vielen Dank!

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 20:43
von Sirius3
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}|')

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 21:13
von PaddyRT
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.

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 21:22
von Sirius3
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.

Re: zusätzliche Spaces bei Dictionary

Verfasst: Donnerstag 8. Dezember 2022, 21:30
von sparrow
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.