我有一个具有多个功能的功能,所有功能都有2个必需参数和许多可选参数。我想知道如何在这个函数中为给定函数设置一个可选参数:
chart_type = "bar"
def chart_selector(slide, df_table, chart_type):
if chart_type == "bar":
add_bar_chrt(slide, df_table)
elif chart_type == "column":
add_column_chrt(slide, df_table)
elif chart_type == "pie":
add_pie_chrt(slide, df_table)
elif chart_type == "line":
add_line_chrt(slide, df_table)
以下是我想要做的事情:我想使用chart_selector()
函数,如果chart_type
是"bar"
,那么我想设置一些可选的参数对于add_bar_chrt()
函数,但我不知道如何?
所以我需要以某种方式将它添加到此代码中:
chart = chart_selector(slide, df_table, chart_type)
答案 0 :(得分:2)
您可以使用*args
和**kwargs
添加任意参数支持到您的函数签名,然后传递它们:
def chart_selector(slide, df_table, chart_type, *args, **kwargs):
if chart_type == "bar":
add_bar_chrt(slide, df_table, *args, **kwargs)
现在传递给chart_selector()
的任何额外参数现已传递到add_bar_chrt()
。
无论如何,当您正在使用此功能时,请考虑使用字典来分派图表类型:
chart_types = {
'bar': add_bar_chrt,
'column': add_column_chrt,
'pie': add_pie_chart,
'line': add_line_chart,
}
def chart_selector(slide, df_table, chart_type, *args, **kwargs):
return chart_types[chart_type](slide, df_table, *args, **kwargs)
字典取代了多分支的if
.. elif
..结构。
演示:
>>> def add_bar_chrt(slide, tbl, size=10, color='pink'):
... return 'Created a {} barchart, with bars size {}'.format(size, color)
...
>>> def add_column_chrt(slide, tbl, style='corinthyan', material='marble'):
... return 'Created a {} column chart, with {}-style plinths'.format(material, style)
...
>>> chart_types = {
... 'bar': add_bar_chrt,
... 'column': add_column_chrt,
... }
>>> def chart_selector(slide, df_table, chart_type, *args, **kwargs):
... return chart_types[chart_type](slide, df_table, *args, **kwargs)
...
>>> chart_selector('spam', 'eggs', 'bar')
'Created a 10 barchart, with bars size pink'
>>> chart_selector('spam', 'eggs', 'column', material='gold')
'Created a gold column chart, with corinthyan-style plinths'