Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Marc Haber Newsgroups: de.comp.lang.python Subject: =?utf-8?q?=5BPython-de=5D_Re=3A_Code_Style_Review?= Date: Thu, 1 Dec 2022 21:30:35 +0100 Lines: 58 Message-ID: References: <480b80d21e58d280c437b4854bfc7cf1@posteo.de> <5a5ca26b-89eb-67c7-9ed2-b590eecc23a6@noris.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: news.uni-berlin.de cS5ijcNBx/3zka6LZLeqLw8gk/vAzBZziyXrOvIibUZQ== Authentication-Results: mail.python.org; dkim=none reason="no signature"; dkim-adsp=none (unprotected policy); dkim-atps=neutral Content-Disposition: inline In-Reply-To: <5a5ca26b-89eb-67c7-9ed2-b590eecc23a6@noris.de> User-Agent: Mutt/2.0.5 (2021-01-21) Message-ID-Hash: HNTJUZFKWRX7PXNHMP4KYRUERT56QH7L X-Message-ID-Hash: HNTJUZFKWRX7PXNHMP4KYRUERT56QH7L X-MailFrom: mh+python-de@zugschlus.de X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-python-de.python.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.7 Precedence: list List-Id: Die Deutsche Python Mailingliste Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Xref: csiph.com de.comp.lang.python:5883 On Wed, Nov 30, 2022 at 10:47:53AM +0000, Matthias Urlichs wrote: > On 28.11.22 21:52, Marc Haber wrote: > > Die > > Alternative, jeder Funktion das Konfig-Dictionary als Parameter > > einzufüllen, finde ich noch schlechter lesbar. Wie ist in Python das > > normale Idiom für sowas? > > Du verpackst deine Funktionen in ein Objekt und gibst __init__ die > Konfig als Parameter. Auch wieder so eine Klasse die man niemals instanziiert? Dann sind die "globals" in der Klasse gekapselt und nicht im Modul, das ist doch nur eine Begrifflichkeit. > Und wenn man nächstes Jahr zwei dieser Objekte gleichzeitig braucht, > freut man sich, dass es sie schon gibt. :-) Dann muss man aber doch die Klasse anders schreiben? > Globals wie "debug" oder halt "DEBUG" gehören sich nicht, finde ich; > dazu gibt es das "logging"-Modul, dem man (wenn's notwendig wird) eh > viel flexibler sagen kann, was es loggen soll, als mit einer Konstanten. > Außerdem ist "logging" weniger programmierfehleranfällig (wer hat noch > nicht versehentlich nicht-debug-Code unter ein "if debug:" gestellt …) > und visuell übersichtlicher. Und weniger tippen muss man auch … Weniger tippen kann ich jetzt nicht sagen, ich hab hier jetzt: logger = logging.getLogger(__name__)↲ loggingStreamHandler = logging.StreamHandler()↲ logger.addHandler(loggingStreamHandler)↲ und weiter unten (da wo die Kommandozeilenparameter gelesen werden): if args.debug: loggingStreamHandler.setLevel(10)↲ logger.setLevel(10)↲ und noch weiter unten (da wo die Konfigurationsdatei gelesen wird): if not args.debug: loggingStreamHandler.setLevel(config.debuglevel)↲ logger.setLevel(config.debuglevel)↲ Bin mir noch nicht sicher was da die richtige Bedingung sein muss, eigentlich möchte ich dass args.debug ein config.debug überschreibt. > Im Übrigen würde ich, wenn du mehr als einen Job gleichzeitig machen > willst, dringend empfehlen, das "threading"-Modul in die Tonne zu treten > und dir stattdessen "anyio" genauer anzusehen. Das kann ich mir wohl nicht aussuchen, weil ich hier mit dem paho-Modul für MQTT koexistieren muss. Grüße Marc -- ----------------------------------------------------------------------------- Marc Haber | "I don't trust Computers. They | Mailadresse im Header Leimen, Germany | lose things." Winona Ryder | Fon: *49 6224 1600402 Nordisch by Nature | How to make an American Quilt | Fax: *49 6224 1600421