为什么下面的代码会抛出未定义的名称表名?
def PlotChart(charttype = 'line', sheetname = 'CA', values = '='+sheetname+'!$M$1:$M$400'):
我能解决这个问题吗?
答案 0 :(得分:4)
当函数定义时,将计算默认参数值,因此您无法访问仅在函数调用时才知道的其他参数值。
我建议使用None
作为默认值,然后再设置正确的默认值。
def PlotChart(charttype='line', sheetname='CA', values=None):
if values is None:
values = '=' + sheetname + '!$M$1:$M$400'
...
或略短,使用or
获取“默认”值(这也会替换空""
,但是)
values = values or ('=' + sheetname + '!$M$1:$M$400')
如果sheetname
始终必须属于values
,您还可以使用格式字符串,然后在调用函数后使用sheetname
的实际值对其进行格式化:
def PlotChart(charttype='line', sheetname='CA', values='={}!$M$1:$M$400'):
values = values.format(sheetname)
...
答案 1 :(得分:1)
如果值中始终存在工作表名称
您应该在函数内执行添加:
def PlotChart(charttype = 'line', sheetname = 'CA', values = '!$M$1:$M$400'):
values = '=' + sheetname + values
如果您希望用户完全更改值:
您应该使用您想要的功能调用该功能
def PlotChart(values, charttype = 'line', sheetname = 'CA'):
...
PlotChart(charttype = 'line', sheetname = 'CA', values = '=' + sheetname + values)
如果您想要两者:
tobias_k答案是最好的:使用无
def PlotChart(charttype='line', sheetname='CA', values=None):
if values is None:
values = '='+sheetname+'!$M$1:$M$400'):
...