Thực ra tiêu đề không phản ánh chính xác câu hỏi tôi muốn hỏi. Mục đích của tôi là như thế này: Tôi đang viết một số chức năng âm mưu bằng cách sử dụng matplotlib. Tôi có một loạt các chức năng dành cho mục đích vẽ đồ thị khác nhau. như line_plot() cho các dây chuyền, bar_plot() cho thanh, vv Ví dụ:sử dụng trang trí python để tự động thay thế hàm giá trị mặc định đối số?
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)
Tuy nhiên, vấn đề là, đối với mỗi chức năng đó là định nghĩa, tôi phải lặp lại một phần mã này:
if axes==None:
fig=plt.figure()
axes=fig.add_subplot(111)
else:
pass
Có cách nào giống như bằng cách sử dụng một trang trí, mà tôi có thể áp dụng trước khi định nghĩa của chức năng âm mưu, mà sẽ làm các phần lặp đi lặp lại của mã tự động? Vì vậy tôi không phải lặp lại chúng mỗi lần.
một lựa chọn có thể là xác định một chức năng như thế này:
def check_axes(axes):
if axes==None:
fig=plt.figure()
axes=fig.add_subplot(111)
return axes
else:
return axes
Sau đó, các ví dụ sẽ như thế nào:
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)
Nhưng Có/sạch/cách pythonic hơn tốt hơn? Tôi đoán tôi có thể sử dụng một trang trí nhưng không tìm ra. ai có thể đưa ra một số ý tưởng?
Cảm ơn !!
Tôi nghĩ giải pháp cuối cùng của bạn khá tốt. Các hàm là các cách hiệu quả, đã được chứng minh để cấu trúc mã. Tôi nghi ngờ một người trang trí sẽ làm phức tạp những thứ không cần thiết. –
Có lẽ bạn có thể tạo một lớp trục với bài kiểm tra của bạn ở init – zenpoy