当我查看Bokeh包时,我注意到教程使用了明确的导入语句,如from bokeh.plotting import figure
和from numpy import linspace
。我通常会尝试避免使用这些内容,例如import numpy as np
,import matplotlib.pyplot as plt
。我认为这被认为是一种很好的做法,因为它有助于避免命名空间污染。
Bokeh是否有偏离此做法的原因,和/或是否有用于Bokeh导入的常用别名(例如import bokeh.plotting as bp
)?
答案 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
定义自己的函数没什么不同。没有意外名称冲突的危险,因为您确切地知道您在本地命名空间中创建了哪些名称。