2017-02-09 5 views
1

Als ich das Bokeh-Paket auscheckte, bemerkte ich, dass die Tutorials explizite Importanweisungen wie from bokeh.plotting import figure und from numpy import linspace verwenden. Normalerweise versuche ich, diese zugunsten von z. B. import numpy as np, import matplotlib.pyplot as plt zu vermeiden. Ich dachte, dies wird als gute Praxis angesehen, da es hilft, Namensraumkontaminationen zu vermeiden.Warum verwenden Bokeh-Tutorials explizite Importe statt Aliase?

Gibt es einen Grund, warum Bokeh von dieser Praxis abweicht und/oder gibt es gebräuchliche Aliasnamen für Bokeh-Importe (z. B. import bokeh.plotting as bp)?

+0

Jeder Weg ist in Ordnung - der "Namespace" ist über das, was Sie hineinlegen möchten, und die explizite Verwendung eines Imports, um etwas in den Namespace zu stellen, ist eine Wahl. Die wichtigste Sache, die es zu vermeiden gilt, sind '*' Importe, da sie Verwirrung darüber erzeugen können, was tatsächlich importiert wird. – Amber

+1

Plotten in Bokeh verwendet viele verschiedene Submodule, die nicht alle in 'bokeh.plotting' existieren. Zum Beispiel 'bokeh.models',' bokeh.layouts', 'bokeh.models.widgets', usw. Anstatt für alles eine neue Abkürzung zu erstellen, importieren sie normalerweise nur die Funktionen, die sie benötigen. – tmwilson26

+0

@ tmwilson26 Das macht Sinn. Vielleicht ist das ein bisschen weit hergeholt, aber würde es einen Weg geben, all meine Bokeh-Importe unter einem gemeinsamen Alias ​​zu "bündeln"? – Peter9192

Antwort

1

Da bokeh viele verschiedene Untermodule enthält, aus denen Sie Funktionen für Ihr Diagramm extrahieren können, die außerhalb von bokeh.plotting liegen, gibt es nicht ein umfassendes Paket, das Sie importieren können, um auf alle Funktionen zuzugreifen. Eine Möglichkeit, dies zu umgehen, besteht darin, ein eigenes Unterpaket in einer separaten Datei zu erstellen, in das alle Funktionen importiert werden, auf die Sie in Ihrer Hauptdatei zugreifen möchten. Zum Beispiel könnten Sie einen Dateinamen my_bokeh.py im selben Verzeichnis wie die Haupt-Skript, und legen in den folgenden Einfuhren (zum Beispiel) erstellen:

from bokeh.models import Range1d,ResizeTool,HoverTool,ColorBar,LinearColorMapper,BasicTicker,Title,BoxSelectTool 
from bokeh.models.widgets import TextInput 
from bokeh.layouts import row,widgetbox 
from bokeh.embed import components 
from bokeh.models.callbacks import CustomJS 
from bokeh.plotting import figure, show, output_file 

nun in Ihrem Haupt-Skript, können Sie diese Unter importieren Paket wie:

import my_bokeh as bpt 
... 
bpt.figure(x_range=bpt.Range1d(0,x-1,bounds='auto'), 
      y_range=bpt.Range1d(0,y-1,bounds='auto'), 
      plot_width=200, plot_height=200) 
... 
p.add_tools(bpt.ResizeTool()) 
... 
bpt.show(p) 

Sie Zugriff auf jede Funktion unter dem bpt alias wie oben gesehen im Skript haben werden und Sie können die Import-Anweisungen in Ihrem Haupt-Skript sauber zu halten.

0

Importieren von einzelnen Namen aus einer Bibliothek ist nicht wirklich "Kontamination". Was Sie vermeiden möchten, ist from somelibrary import *. Das ist anders, weil Sie nicht wissen, welche Namen importiert werden. Sie können also nicht sicher sein, dass es keinen Namenskonflikt geben wird.

Im Gegensatz dazu erstellt nur from numpy import linspace einen Namen linspace. Es ist nicht anders, als eine gewöhnliche Variable wie linspace = 2 zu erstellen oder eine eigene Funktion mit def linspace zu definieren. Es besteht keine Gefahr von unerwarteten Namenskonflikten, da Sie genau wissen, welche Namen Sie in Ihrem lokalen Namespace erstellen.

+0

Ich sehe Ihren Punkt, aber es unterscheidet sich von üblichen Tutorials zum Beispiel für Matplotlib oder Numpy. Im Allgemeinen mag ich die häufig verwendeten Aliase, da es sofort klar ist (auch für andere, die Ihren Code lesen), zu welchem ​​Modul die "Figur" gehört. Wenn ich auf meine Frage zurückkomme, würde ich gerne wissen, ob es einen bestimmten Grund gibt, * keine * Aliase zu verwenden und ob es Standard-Aliase für Bokeh gibt, wenn Sie sie * benutzen wollen. – Peter9192

+0

@ Peter9192: Es hängt nur davon ab, was Sie tun möchten."Gemeinsame Tutorials" für Matplotlib oder Numpy verwenden häufig viele Funktionen aus den Bibliotheken, nicht nur ein oder zwei, so dass es sinnvoll ist, das Modul zu importieren, statt "von numpy import <20 Funktionen, die ich brauche>". Wenn der Code, den Sie betrachten, wirklich nur eine oder zwei Funktionen verwendet, dann ist es sinnvoll, diese einfach zu importieren. In vielen Fällen ist es nur eine Frage der persönlichen Präferenz. Ob es eine Standardabkürzung für Bokeh gibt, weiß ich nicht. – BrenBarn

Verwandte Themen