Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Stefan Behnel Newsgroups: de.comp.lang.python Subject: Re: [Python-de] f-string Formatanweisung Date: Mon, 22 Jun 2020 15:14:47 +0200 Lines: 49 Message-ID: References: <3e3c30fe-d11e-6061-2ed4-0a7015359882@behnel.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: news.uni-berlin.de YnKjCvwYZaV/oivKy+z+wwxNhCAHQ2op97MJqfeIrpQg== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org Authentication-Results: mail.python.org; dkim=pass reason="2048-bit key; unprotected key" header.d=behnel.de header.i=@behnel.de header.b=JxEdSgIM; dkim-adsp=pass; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1592831687; s=strato-dkim-0002; d=behnel.de; h=In-Reply-To:Date:Message-ID:References:To:Subject:From: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=0hse+Az+jkNfx70+vuBH2BKnjYnrf30o68tiQizhHYE=; b=JxEdSgIMxPwBEWkAr78S4r9e7FFtvI5y9Wym36Akwhd81UHiRrCV92f/+ZV6fUKBuE Q8GJ04ziSHd874J5ytealckNdrrbcqm5CmbmX/68BdaZb/SfzMW6rKB6pIVVRcdwRVVd 4J6i5Qbd9ti5nGIpTie8BdjMdPh6697/7z5wdvRJle6+RHDk7dS7W7BkbdWqDe48QS6p QpwA/RexH2QHV0MXTTWKQjIw421dQkXCXGvbs4DU/L11a1CapwnzaCt9QRLbC4qvv5wc mpsSVy6GBpCHxpTfzrkIem1gbuPUH85PdNIIyxRsf/EtvGR2UJtms0qyDQKHk+MSaQDA bLOg== X-RZG-AUTH: ":E1MMdFW4b++AXZOTwA41DOYM0Dv9LNWvavC/fJZ6Wfgmp/Lh1ANWCRaaq2R1hHsoZh74ArcRjqdrtbnfdSk7SR00Qivwavc27kbrx2CHRUeo5xXR" X-RZG-CLASS-ID: mo00 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 In-Reply-To: Content-Language: de-DE X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <3e3c30fe-d11e-6061-2ed4-0a7015359882@behnel.de> X-Mailman-Original-References: Xref: csiph.com de.comp.lang.python:5647 Hallo nochmal, es hilft doch durchaus, nicht nur Code zu lesen, sondern auch den Text, den du dazu geschrieben hast. :) ruppert@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: den Formatstring programmatisch erzeugen statt hinzuschreiben, stimmt das? 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.) ".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)) 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