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

时间:2017-02-09 19:17:37

标签: python bokeh

当我查看Bokeh包时,我注意到教程使用了明确的导入语句,如from bokeh.plotting import figurefrom numpy import linspace。我通常会尝试避免使用这些内容,例如import numpy as npimport matplotlib.pyplot as plt。我认为这被认为是一种很好的做法,因为它有助于避免命名空间污染。

Bokeh是否有偏离此做法的原因,和/或是否有用于Bokeh导入的常用别名(例如import bokeh.plotting as bp)?

2 个答案:

答案 0 :(得分:1)

由于bokeh有许多不同的子模块,您可以从中为bokeh.plotting之外的情节提取函数,因此没有一个包含所有包的程序包可以导入以访问所有功能。解决此问题的一种方法是在单独的文件中创建自己的子包,该文件将导入您希望在主文件中访问的所有功能。例如,您可以在与主脚本相同的目录中创建文件名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

现在,在您的主脚本中,您可以将此子包导入为:

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别名下的每个函数,并且可以保持主脚本中的import语句清洁。

答案 1 :(得分:0)

从库中导入个人名称并不是真正的“污染”。您要避免的是from somelibrary import *。这是不同的,因为您不知道将导入哪些名称,因此您无法确定不会发生名称冲突。

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