दरअसल शीर्षक वास्तव में उस प्रश्न को प्रतिबिंबित नहीं करता है जिसे मैं पूछना चाहता हूं। मेरा उद्देश्य इस तरह है: मैं matplotlib का उपयोग करके कुछ साजिश कार्यों को लिख रहा हूं। मेरे पास कई योजनाएं हैं जो अलग-अलग साजिश के उद्देश्य के लिए हैं।स्वचालित रूप से फ़ंक्शन तर्क डिफ़ॉल्ट मान को प्रतिस्थापित करने के लिए पायथन सजावट का उपयोग करें?
if axes==None:
fig=plt.figure()
axes=fig.add_subplot(111)
else:
pass
:
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)
फिर भी समस्या प्रत्येक समारोह है कि निर्धारित किया है के लिए, है, मैं कोड के इस हिस्से को दोहराना: बार आदि उदाहरण के लिए के लिए line_plot() लाइनों के लिए, bar_plot() की तरह
क्या एक सजावट का उपयोग करके ऐसा कोई तरीका है, जिसे मैं प्लॉटिंग फ़ंक्शन की परिभाषा से पहले लागू कर सकता हूं, जो स्वचालित रूप से कोड का बार-बार भाग करेगा? इस प्रकार मुझे हर बार उन्हें दोहराना नहीं है। तो उदाहरण तरह होगा
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)
लेकिन वहाँ एक बेहतर/साफ/अधिक pythonic तरीका है? मुझे लगता है कि मैं एक सजावट का उपयोग कर सकता हूं लेकिन इसे समझ नहीं पाया। क्या कोई कुछ विचार दे सकता है?
धन्यवाद !!
import matplotlib.pyplot as plt
def check_axes(plot_fn):
def _check_axes_wrapped_plot_fn(axes=None, x=None, y=None):
if not axes:
fig = plt.figure()
axes = fig.add_subplot(111)
return plot_fn(axes, x, y)
else:
return plot_fn(axes, x, y)
return _check_axes_wrapped_plot_fn
@check_axes
def line_plot(axes, x=None, y=None):
axes.plot(x, y)
@check_axes
def bar_plot(axes, x=None, y=None):
axes.bar(left=x, height=y)
कैसे काम करता है: @check_axes
वाक्य रचना सजाया समारोह, उदा के नाम को पुनर्परिभाषित
मुझे लगता है कि आपका अंतिम समाधान बहुत अच्छा है। कार्य कोड बनाने के लिए कुशल, सिद्ध तरीके हैं। मुझे संदेह है कि एक सजावटी अनावश्यक रूप से चीजों को जटिल करेगा। –
हो सकता है कि आप अपने परीक्षण के साथ अपने अक्ष के साथ एक अक्ष वर्ग बना सकते हैं – zenpoy