Как по-разному называть имена переменных внутри функции def в python - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь создать функцию, которая позволила бы мне получать различные масштаберы и масштабированные наборы данных (, если i = 0, тогда возвращаемое значение будет Scaler_0, scaled_0 )

На основе на том, что я искал до сих пор, я пытался использовать vars (), чтобы сделать функцию, как показано ниже

def scaler(data, i):
  from sklearn.preprocessing import MinMaxScaler
  scaler = MinMaxScaler(feature_range = (0,1))
  scaled = scaler.fit_transform(data)
  scaled = pd.DataFrame(data = scaled,
                        index = data.index,
                        columns = data.columns)
  scaler + vars()[i] = scaler
  scaled + vars()[i] = scaled

  return scaler + vars()[i], scaled + vars()[i]

Но я получаю код ошибки, например SyntaxError: can't assign to function call

Может кто-нибудь сказать мне, как по-разному называть переменные внутри функции def?

Заранее спасибо (o ^ ▽ ^) o ☆

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Очень мало случаев, когда использование динамических c имен переменных является хорошей идеей, и вряд ли какой-либо из них связан с присвоением этих переменных. Я бы предпочел, чтобы эта функция выполняла только вычисления и устанавливала переменные из вызывающего кода:

def scaler(data):
  from sklearn.preprocessing import MinMaxScaler
  scaler = MinMaxScaler(feature_range = (0,1))
  scaled = scaler.fit_transform(data)
  scaled = pd.DataFrame(data = scaled,
                        index = data.index,
                        columns = data.columns)

  return scaler, scaled

...
scaler_0, scaled_0 = scaler(my_data)

При этом использование индексов _N предполагает, что это случай для списков.

0 голосов
/ 28 февраля 2020

Чтобы динамически назвать переменную, вы можете сделать:

globals()[name] = something

В вашем случае:

globals()[f'scaler_{i}'] = scaler

Но обычно это плохая практика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...