2017-02-09 22 views
1

私はBokehパッケージをチェックしていたので、チュートリアルではfrom bokeh.plotting import figurefrom numpy import linspaceのような明示的なインポート文を使用していることに気付きました。私は通常、例えばimport numpy as np,import matplotlib.pyplot as pltのようにこれらを避けようとします。名前空間の汚染を避けるのに役立つので、これは良い方法と考えていました。bokehチュートリアルでエイリアスではなく明示的なインポートが使用されるのはなぜですか?

Bokehがこの慣行から逸脱している、および/またはBokeh輸入に共通のエイリアス(例:import bokeh.plotting as bp)がある理由はありますか?

+0

どちらの方法も問題ありません。「名前空間」は、あなたが入れたいものに関するもので、明示的にインポートを使って名前空間に何かを入れることが選択肢です。避けるべき主なものは、実際にインポートされているものについて混乱を招く可能性があるので、 '*'のインポートです。 – Amber

+1

bokehでプロットすると、 'bokeh.plotting'に存在しない多くの異なるサブモジュールが使用されます。たとえば、 'bokeh.models'、' bokeh.layouts'、 'bokeh.models.widgets'などです。すべての新しい省略形を思いつくのではなく、通常、必要な機能だけをインポートします。 – tmwilson26

+0

@ tmwilson26そうですね。おそらく、これは少し遠いですが、共通のエイリアスの下にすべてのボケのインポートを「バンドル」する方法がありますか? – Peter9192

答えて

1

bokeh.plottingの外にある関数を引き出すことができる多くの異なるサブモジュールがあるため、すべての関数にアクセスするためにインポートできる包括的なパッケージはありません。これを回避する方法の1つは、独自のサブパッケージを別々のファイルに作成して、メインファイルにアクセスしたいすべての機能をインポートすることです。たとえば、あなたがメインのスクリプトと同じディレクトリにあるファイル名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文を維持することができます。

0

ライブラリから個々の名前をインポートすることは、実際には「汚染」ではありません。あなたが避けたいのはfrom somelibrary import *です。インポートする名前がわからないため、名前の衝突がないことを確認できないため、これは異なります。

対照的に、from numpy import linspaceを実行すると、ただ1つの名前linspaceが作成されます。 linspace = 2のような通常の変数を作成することや、def linspaceで独自の関数を定義することと同じです。予期せぬ名前の衝突の危険はありません。これは、ローカルネームスペースで作成している名前を正確に知っているからです。

+0

私はあなたの意見を見ていますが、例えばmatplotlibやnumpyの一般的なチュートリアルから逸脱しています。私は一般的に、一般的に使われているエイリアスが好きです。なぜなら、 'figure 'がどのモジュールに属するのかが即座に(あなたのコードを読んでいる他の人にも)明らかです。私の質問に戻って、エイリアスを使用しない特定の理由があるかどうか、そしてあなたが*使用しようとしている場合、bokehの標準エイリアスがあるかどうかを知りたいと思います。 – Peter9192

+0

@ Peter9192:あなたのやりたいことだけに依存します。matplotlibやnumpyのための "共通チュートリアル"は、ライブラリの多くの機能を1つか2つだけでなく使用することが多いので、 'numpy import <20 functions from I need> 'を実行するのではなく、モジュールをインポートするのが理にかなっています。あなたが実際に見ているコードが1つまたは2つのnumpy関数を使用する場合は、それらをインポートするだけです。多くの場合、それは単なる個人的な好みの問題です。 bokehの標準的な省略形があるかどうかは、わかりません。 – BrenBarn

関連する問題