如何使用可选参数python3

时间:2020-05-13 17:12:41

标签: python python-3.x matplotlib

我有一个绘图功能可以绘制一些数据。我想对它进行语法化,使其自动获得y个限制,但当我手动将特定限制传递给它时会例外。

当我希望使用自己的轴限制时,我通过手动更改变量的值来做到这一点。但是我知道这只是解决方法,因此欢迎提出任何建议:

def plot_data(dataset, set_own_lim=1, my_ymin, my_ymax):
       ax=plt.subplot(111)
             if set_own_lim=0:
                ax.set_ylim(min(dataset),max(dataset)) #calculating y range from data
             else:
                ax.set_ylim(my_ymin, my_ymax)        # uses my own limits for y range
       ax.plot(dataset)

我想以某种方式定义一个函数,我可以像plot_data(some_data)那样调用它,以从数据中获取自动限制,当我需要定义函数时,也可以将其称为plot_data(some_data,my_ymin, my_ymax)。手动轴范围

2 个答案:

答案 0 :(得分:1)

my_ymin, my_ymax参数设置为None,然后在函数内部检查这些值是否为None,然后可以计算它们,否则使用用户传递的值。像这样:

def plot_data(dataset, my_ymin=None, my_ymax=None):
       ax=plt.subplot(111)
             if not my_ymin:
                ax.set_ylim(min(dataset),max(dataset))
             else:
                ax.set_ylim(my_ymin, my_ymax)
       ax.plot(dataset)

答案 1 :(得分:1)

简单使用None

def plot_data(dataset, ymin=None, ymax=None):
   # ...
   ymin = min(dataset) if ymin is None else ymin
   ymax = max(dataset) if ymax is None else ymax
   # ...

请记住,这实际上会使您实际上None传递给set_XXXlim()。在这种情况下,您可以使用前哨值:

sentinel = object()

def plot_data(dataset, ymin=sentinel, ymax=sentinel):
   # ...
   ymin = min(dataset) if ymin is sentinel else ymin
   ymax = max(dataset) if ymax is sentinel else ymax
   # ...

这将允许plot_data(data, None, None)

相关问题