Warum ist Pythons Protokollierungsbibliothek camelCase?

Ich habe mit einem Freund über die Python-Codierungskonventionen gesprochen und plötzlich "PEP8 in Python sagt, dass Funktionsnamen in Kleinbuchstaben geschrieben werden sollten, aber warum einige Bibliotheken ([ logging]](https: // docs) Wird camelCase in .python.org / ja / 3 / library / logging.html) usw. übernommen? "

#Ein Beispiel für die Protokollierung von Code. Der Methodenname wie getLogger lautet camelCase.
import logging

logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

Tatsächlich sagt PEP8 "Namen von Funktionen und Variablen":

Funktionsnamen sollten nur in Kleinbuchstaben angegeben werden. Außerdem sollten Wörter nach Bedarf durch Unterstriche getrennt werden, um die Lesbarkeit zu gewährleisten.

Die Namen von Variablen folgen den gleichen Konventionen wie Funktionen.

Erlaube MixedCase aus Kompatibilitätsgründen nur, wenn MixedCase bereits verwendet wird (zB threading.py).

Es heißt: "Es tut mir leid, dass camelCase in einigen Bibliotheken bereits verwendet wird." Ich war ein wenig besorgt und versuchte, die Umstände zusammenzufassen. Um zum Schluss zu kommen,

Das war der Grund.

Die Protokollierung wurde zur gleichen Zeit entwickelt, als PEP8 unter Bezugnahme auf Java formuliert wurde.

stackoverflow "[Wieso folgt das Protokollierungsmodul von Python nicht den PEP8-Konventionen?](Https://stackoverflow.com/questions/22993667/how-come-the-pythons-logging-module-doesnt-follow-pep8-conventions?" Wie ich aus der Antwort von "/ 22993896 # 22993896)" erfahren habe, scheint es, dass "Protokollierung" ursprünglich unter Bezugnahme auf Javas "Log4j" implementiert wurde. Es wurde auch bestätigt, dass es tatsächlich als "betroffene Bibliothek" in PEP282 aufgeführt ist.

Wenn Sie sich den Code für "Log4j" in TECHSCORE-Artikel ansehen, ist er fast der gleiche.

//Instanzgenerierung
Logger logger=Logger.getInstance(Sample.class.getName());

//Legen Sie fest, dass ein Protokollereignis generiert wird, wenn die Protokollstufe WARN oder höher ist
logger.setLevel(Level.WARN);

//Protokollausgabe
logger.info("This is info.");//Nicht ausgegeben
logger.warn("This is warn.");//Ausgabe
logger.error("This is error.");//Ausgabe

Es heißt auch, dass "die Protokollierung bereits im Jahr 2001 entwickelt wurde und ungefähr zur gleichen Zeit PEP8 formuliert wurde".

Laut wiki scheint es auch unter Entwicklern bekannt zu sein, PEP8 zu verletzen, aber es ist innerhalb des Projekts und rückwärts konsistent. Es scheint, dass dies bisher nicht mit Schwerpunkt auf Kompatibilität behoben wurde.

API uses camelCase (goes against PEP8 recommendation and most of the stdlib)

  • PEP8 says - consistency with this style guide is important. Consistency within a project is more important. Consistency within one module or function is most important.
  • It's a low priority right now, unless there's an initiative to ensure the rest of the stdlib is made to conform to PEP8. -- VinaySajip

Dieses Wiki erwähnt eine Bibliothek namens logging2. Hier steht so viel wie "besser als log4j" w

A More Pythonic Logging System; or, You Deserve Better Than log4j

Informationen zur Threading-Bibliothek

Lesen Sie auch threading, das in PEP8 als Beispiel für" wenn MixedCase bereits verwendet wird "erwähnt wurde. Ich tat. In Python 3.8-Dokumentation heißt es: "camelCase wird auch aus Gründen der Abwärtskompatibilität übernommen".

Obwohl hier nicht aufgeführt, wird der Name camelCase, der für einige Methoden und Funktionen in diesem Modul der Python 2.x-Serie verwendet wird, in diesem Modul weiterhin unterstützt.

In Python2.7 wurde es so geschrieben.

Ab Python 2.6 bietet dieses Modul einen PEP 8-kompatiblen Alias, der die Eigenschaften von camelCase ersetzt, die von der Java-Threading-API betroffen sind. Diese aktualisierte API ist mit der des Multiprozessor-Moduls kompatibel. Der Name camelCase wurde jedoch nicht als veraltet geplant und wird weiterhin sowohl in Python 2.x als auch in 3.x unterstützt.

Dies wird schrittweise in einer PEP8-kompatiblen Form migriert, während die Kompatibilität erhalten bleibt. Ich hoffe, dass die "Protokollierungs" -Bibliothek allmählich zu einem PEP8-kompatiblen Formular übergeht, genau wie "Threading".

Laut Documentation scheint diese Bibliothek auch stark von Java beeinflusst zu sein.

Das grobe Design dieses Moduls basiert auf dem Threading-Modell von Java. Trotzdem macht Java Sperren und Bedingungsvariablen zum Grundverhalten aller Objekte, während Python sie in separate Objekte aufteilt.

Recommended Posts

Warum ist Pythons Protokollierungsbibliothek camelCase?
Warum ist Pythons Protokollierungsbibliothek camelCase?
Warum Python für maschinelles Lernen ausgewählt wird
Wo ist Python fließend?
Was ist Pythons __init__.py?
Wird die Objektorientierung von Python nachgerüstet?