您可以通過使用*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'
這實在是不清楚。爲什麼你不能把它們放在if語句中的add_bar_chrt的調用中? – 2014-10-08 11:21:42
只需將其他參數添加到函數調用中,例如'add_bar_chrt(幻燈片,df_table,optional_arg1,optional_arg2,anotherarg = 123)' – mhawke 2014-10-08 11:22:02
@ Daniel Roseman,道歉,但這個話題本身讓我感到困惑,但我相信我已經完成了你的建議? – 2014-10-08 11:24:19