Moet ik np.absolute of np.abs gebruiken?

Numpy biedt zowel np.absoluteen de alias np.absgedefinieerd via

from .numeric import absolute as abs

wat een duidelijke schending lijkt te zijn van het zen van python:

Er zou één – en bij voorkeur maar één – voor de hand liggende manier moeten zijn om het te doen.

Dus ik vermoed dat hier een goede reden voor is.

Ik heb persoonlijk np.absgebruikt in bijna al mijn code en keek naar b.v. het aantal zoekresultaten voor np.absversus np.absoluutop Stack Overflow lijkt het alsof een overweldigende meerderheid hetzelfde doet (2130 vs 244 hits).

Is er een reden waarom ik liever np.absoluteboven np.absin mijn code zou gebruiken, of moet ik gewoon voor de meer “standaard” np.abs?


Antwoord 1, autoriteit 100%

Waarschijnlijk omdat er een ingebouwde functie is met dezelfde naam, abs. Hetzelfde geldt voor np.amax, np.aminen np.round_.

De aliassen voor de NumPy-functies abs, min, maxen roundworden alleen gedefinieerd in het pakket op het hoogste niveau.

Dus np.absen np.absolutezijn volledig identiek. Het maakt niet uit welke je gebruikt.

Er zijn verschillende voordelen aan de korte namen: ze zijn korter en ze zijn bekend bij Python-programmeurs omdat de namen identiek zijn aan de ingebouwde Python-functies. Dus eindgebruikers hebben het gemakkelijker (minder typen, minder onthouden).

Maar er zijn ook redenen om verschillende namen te hebben: NumPy (of meer in het algemeen pakketten van derden) hebben soms de Python-functies abs, min, enz. nodig. pakket definiëren ze functies met een andere naam, zodat je nog steeds toegang hebt tot de Python-functies – en alleen op het hoogste niveau van het pakket maak je de “snelkoppelingen” zichtbaar. Opmerking: in dat geval zijn verschillende namen niet de enige beschikbare optie: men zou dat kunnen omzeilen met de Python-module builtinsom toegang te krijgen tot de ingebouwde functies als men een ingebouwde naam overschaduwt.

Het kan ook het geval zijn (maar dat is zuivere speculatie van mijn kant) dat ze oorspronkelijk alleen de langbenoemde functies bevatten absolute(enzovoort) en voegden de korte aliassen later alleen aan. Als een grote en goed gebruikte bibliotheek verwijderen de Numpy-ontwikkelaars of depreceren geen dingen lichtjes. Dus ze kunnen de lange namen gewoon rondhouden omdat het oude code / scripts zou kunnen doorbreken als ze ze zouden verwijderen.

Other episodes