Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Stefan Schwarzer Newsgroups: de.comp.lang.python Subject: =?utf-8?q?=5BPython-de=5D_Re=3A_Code_Style_Review?= Date: Fri, 2 Dec 2022 00:07:48 +0100 Lines: 62 Message-ID: <94754556-691b-f255-ba37-eaf0f59c2dfa@sschwarzer.net> References: <480b80d21e58d280c437b4854bfc7cf1@posteo.de> <5a5ca26b-89eb-67c7-9ed2-b590eecc23a6@noris.de> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: news.uni-berlin.de OKon4lczk/aAIXWBJYAmUwU5qufgHhKsuAcNbhU1X9Og== Authentication-Results: mail.python.org; dkim=none reason="no signature"; dkim-adsp=none (unprotected policy); dkim-atps=neutral User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.24) Gecko/20100411 Thunderbird/2.0.0.24 Mnenhy/0.7.6.666 Content-Language: en-US, de-DE In-Reply-To: X-Provags-ID: V03:K1:154LtlQRYLDBmjgmHi/jkTQWWzALtpOuGv0XAo3HffVsahJy4gY rOHRWD3eqK6KkKDwbZ2STuUOcOGj/FUNSs4hxFc41Djx7VjY8wm9Fx6vlidkK+jqWkGbk3h IQRx9hUnFU1oCTbpJ4Q1KnpehnWC68t8ocwXWN3GZd6EskYMufKJf5DAsCT13qT7dEHqBns zd8yDYOS8dIxuiMw9SftQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:PSvVpH7WUh0=:ZkFCM7XbQg7JkmWeprhucW vY1VnVnWNLr6rcNb8iWZ/0vbKQkbOwqwMCk8ez/mf1bBBqi8CHxWBgrOslHrPb9jnhM6qaab9 WM3kCg1UgyIHzDWg25p+f3dTX/IOV3hPDKVEBbbDnih7gZ6x+LUrA/MHqXKc8ZEG7lM+zq5Xd GvIK5OlmSxI84kWsefVB2qbdDfi9UDYbk7fcnlaWjy8pkYbvjrPDNsEJKCWBHO6HTbAPa7Gqi tF3QrCObWYyK2XefKKXYeaj4t1nBr9/O06FyYJNYVhuY9cyShFFhLi+Iw4/7uDt91MdtLxhQ/ jBIRnNgVf+RZfgQifEXGMBIxox+tA8sSGcn7O20B+0Rp2vE+WvFtBqLjLrBh5B58fSnEj+JSp aLyaws7sdsEpFCj1NUqIy/+FC3kgaEgNibFY5ID6S6uPYB2pwuT6ou8Asat6WrFT5H4JJ8+Rt S6c3qw0frnUGG8YiSDIkeGdut+kCbit+7F2zbrIIe+ZHBZ7FnvLKNdvss0Xmvffsc2j8cYIow 6PHcdi4Xi4pFADYQ4HrcOdE8tYFOg2F8e2XIZHh9Sj3Kh3lLvtiWYKGcHgey19XU5VcBwIMxf tTpGBaJmbT9eVZ95l7HAYjSfGbCWZjd2PwmXMaQpZ07tH8XZGcDnbKhm3ws+O4GbPpgJNJorC cmzgI3CDqKRvNOa4uSIexY8wAXOINYK8Jqzy4/9Rr/VPNgj9vPtmGVd0LB7j+jfeBkfJUKvON pg8jFqqaz4HGthXpDZ6nJZ2DaiMH4BEGN5s+/G2xv6BdZ3NUFTFOwPE89xLl3yipx/KPx4RvC TOUF3wZzxtGz/kIE6K0/9BhmE0qHQ== Message-ID-Hash: 5URA3SSOVFPWR4PWHYTCMHMGKU5ACQE2 X-Message-ID-Hash: 5URA3SSOVFPWR4PWHYTCMHMGKU5ACQE2 X-MailFrom: sschwarzer@sschwarzer.net 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:5885 On 2022-12-01 21:30, Marc Haber wrote: > 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. Ich denke auch, das ist sehr ähnlich. >> 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)↲ In manchen Fällen kommt man auch mit dem Aufruf von `logging.basicConfig` aus. Ich habe mir deinen Code aber nicht genau angesehen, inwieweit das für dich anwendbar ist. >> 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. Ich kannte `anyio` noch nicht und habe jetzt nur das Inhaltsverzeichnis überflogen. Das ist nach meinem Eindruck schon eine ganze Menge Komplexitäts- und damit Lern-Aufwand, und dann stellt sich immer die Frage, ob es sich lohnt, so eine komplexe Abhängigkeit zu nutzen, wenn man vielleicht nur einen ganz kleinen Anteil davon braucht. Mit dem Logging-Modul ist das ähnlich, aber da ist es immerhin so, dass es so bekannt und "universell" ist, dass viele damit sowieso schon gearbeitet haben. Viele Grüße Stefan