函数参数内的字符串连接

时间:2018-06-08 12:56:29

标签: python string function xlsxwriter

为什么下面的代码会抛出未定义的名称表名?

def PlotChart(charttype = 'line', sheetname = 'CA', values = '='+sheetname+'!$M$1:$M$400'):

我能解决这个问题吗?

2 个答案:

答案 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'):
    ...