実際、タイトルには質問したい質問が正確に反映されていません。私の目的は次のようなものです:matplotlibを使ってプロット関数を書いています。私は、異なるプロットの目的のための一連の機能を持っています。例えばバーなどの行のためのline_plot()、bar_plot()のように:関数の引数のデフォルト値を自動的に置き換えるためにpythonデコレータを使用しますか?
import matplotlib.pyplot as plt
def line_plot(axes=None,x=None,y=None):
if axes==None:
fig=plt.figure()
axes=fig.add_subplot(111)
else:
pass
axes.plot(x,y)
def bar_plot(axes=None,x=None,y=None):
if axes==None:
fig=plt.figure()
axes=fig.add_subplot(111)
else:
pass
axes.bar(left=x,height=y)
それでも問題が定義されていた各機能のために、私はこのコードの一部を繰り返す必要があり、次のとおりです。
if axes==None:
fig=plt.figure()
axes=fig.add_subplot(111)
else:
pass
デコレータを使用する方法はありますか?プロット関数の定義の前に適用することができます。これはコードの繰り返し部分を自動的に行いますか?したがって、毎回繰り返す必要はありません。次に例は以下のようになります
def check_axes(axes):
if axes==None:
fig=plt.figure()
axes=fig.add_subplot(111)
return axes
else:
return axes
:
一つの可能なオプションは、このような関数を定義することである
import matplotlib.pyplot as plt
def line_plot(axes=None,x=None,y=None):
axes=check_axes(axes)
axes.plot(x,y)
def bar_plot(axes=None,x=None,y=None):
axes=check_axes(axes)
axes.bar(left=x,height=y)
しかし、より良い/クリーン/より多くの神託の方法はありますか?私はデコレータを使うことができますが、それを理解していないと思います。誰かが何か考えを与えることができますか?
ありがとうございます!ここで
あなたの最後の解決策はかなり良いと思います。関数は、コードを構造化する効率的で実績のある方法です。私はデコレータが物事を不必要に複雑にすると思う。 –
おそらく、あなたの答えのために、 – zenpoy