Python:为函数内的函数设置参数

时间:2014-10-08 11:19:52

标签: python function parameters args kwargs

我有一个具有多个功能的功能,所有功能都有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)

1 个答案:

答案 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'