Stefan Behnel <python-de(a)behnel.de> wrote:
> Hallo nochmal,
Hallo ebenfalls,
>
> es hilft doch durchaus, nicht nur Code zu lesen, sondern auch den Text, den
> du dazu geschrieben hast. :)
>
> ruppert(a)hs-worms.de schrieb am 22.06.20 um 12:36:
>> das unten befindliche Programm funktioniert mit f-String-Formatierung
>> nicht so, wie ich das erwarte. Wenn ich das F-String-Format, das ich
>> haben möchte, zuerst als Striing formatiere (s), sieht es richtig aus.
>
> Du meinst wohl diese Zeilen:
>
> f = "{{:0{:1d}d}} {{:0{:1d}b}} {{:0{:1d}b}}".format(dl,fw,fw)
>
> # s wird in der for-Schleife unten nicht interpretiert,
> # sondern als string ausgegeben:
>
> s = 'f"' + str(f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}") + '"'
>
> bzw. wenn ich mir nur den f-string ansehe:
>
> >>> dl = 5
> >>> fw = 6
> >>> f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}"
> '{i:05d} {gray:06b} {bin:06b}'
>
> Für mich sieht das soweit erstmal korrekt aus. Ich vermute, du möchtest
> etwas machen, was mit .format() funktioniert aber mit f-strings nicht:
Ja, genau das.
> den
> Formatstring programmatisch erzeugen statt hinzuschreiben, stimmt das?
Ja, genau.
> f-strings sind ein festes Sprachkonstrukt, das direkt in der Sprache (bzw.
> im Parser) auf String-Literalen ausgewertet wird, daher ist es nicht
> möglich, f-strings zu generieren. (Ok, du könntest eval() verwenden, aber
> das ist recht langsam und auch fehleranfällig ??? tu's lieber nicht.)
ok, danke für den Tip. Dann denke ich, den Versuch, meine Formatierung
mit f-Strings hinzukriegen, kann ich aufgeben.
> ".format()" dagegen wird dynamisch auf beliebigen Strings ausgewertet,
> nicht nur auf Literalen.
>
> Du kannst .format() und f-strings aber auch mischen:
>
> formatiere_ausgabe = \
> f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}".format
>
> print(formatiere_ausgabe(i=i, gray=gray, bin=bin))
Ja, darauf wird es hinauslaufen: f-strings verwenden, wo die
funktionieren und .format()-Formatierung wo f-Strings nicht
funktionieren.
>
> Hier ist "formatiere_ausgabe" die ".format" String-Methode, angewendet auf
> meinen Formatierungsstring, den ich per f-string erzeugt habe. Wenn ich
> diese Methode dann aufrufe, und meine drei Argumente übergebe, dann wird
> meine Ausgabe entsprechend dem Formatierungsstring zusammengestellt.
>
> Stefan
Viele Grüße
M.Ruppert
--
ruppert(a)hs-worms.de