为什么散景教程使用显式导入而不是别名?

Why do bokeh tutorials use explicit imports rather than aliases?

当我检查 Bokeh 包时,我注意到教程使用显式导入语句,如 from bokeh.plotting import figurefrom numpy import linspace。我通常会尽量避免这些,例如 import numpy as npimport matplotlib.pyplot as plt。我认为这被认为是好的做法,因为它有助于避免命名空间污染。

Bokeh 偏离这种做法有什么原因吗,and/or Bokeh 导入是否有通用别名(例如 import bokeh.plotting as bp)?

从库中导入个人名称并不是真正的 "contamination"。你想避免的是做from somelibrary import *。这是不同的,因为您不知道将导入哪些名称,因此您不能确定不会发生名称冲突。

相比之下,from numpy import linspace 只会创建一个名称 linspace。这与创建像 linspace = 2 这样的普通变量或使用 def linspace 定义自己的函数没有什么不同。没有意外名称冲突的危险,因为您确切地知道您在本地名称空间中创建的名称。

由于 bokeh 有许多不同的 sub-modules,您可以从中提取 bokeh.plotting 之外的函数用于您的绘图,因此没有一个包罗万象的包可以导入访问所有功能。解决此问题的一种方法是在单独的文件中创建您自己的 sub-package,该文件将导入您希望在主文件中访问的所有函数。例如,您可以在与主脚本相同的目录中创建一个文件名 my_bokeh.py,并放入以下导入(例如):

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

现在,在您的主脚本中,您可以将此 sub-package 导入为:

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)

您将可以访问上述脚本中 bpt 别名下的每个函数,并且您可以保持主脚本中的导入语句干净。