использовать декоратор python для автоматической замены значения аргумента функции по умолчанию?

На самом деле заголовок не совсем отражает тот вопрос, который я хочу задать. Моя цель такова :Я пишу некоторые функции построения графиков, используя matplotlib. У меня есть ряд функций, которые предназначены для разных целей построения графика. как линия _график ()для линий, столбец _график ()для столбца и т. д. например:

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)

Но есть ли лучший/чистый/более питонический способ? Я думаю, я могу использовать декоратор, но не понял.может ли кто-нибудь дать некоторое представление?

Спасибо!!

6
задан wiswit 2 August 2012 в 08:33
поделиться