Конкатенация строк внутри аргументов функции - PullRequest
0 голосов
/ 08 июня 2018

Почему в приведенном ниже коде выбрасывается неопределенное имя namename?

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

Есть ли способы исправить это?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Значения параметров по умолчанию оцениваются, когда функция определена , поэтому вы не можете получить доступ к другому значению параметра, которое будет известно только тогда, когда функция называется .

* 1006.* Я бы предложил использовать 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)
    ...
0 голосов
/ 08 июня 2018

Если в значениях всегда будет имя листа

Вы должны выполнить сложение внутри функции:

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 ответылучшее: используйте None

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