Как избежать непреднамеренного изменения глобальной переменной при использовании ее в качестве локальной переменной (внутри функции)? - PullRequest
1 голос
/ 11 марта 2020

Проблема:

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

Код для воспроизведения:

data = {'A' : [1,2,3],
        'B' : [4,5,6],
        'C' : [7,8,9]}
df = pd.DataFrame(data)

def func(df):
    df['D'] = df['A'] * df['B'] / df['C']
    return df

func(df) # running function, without assigning it to original variable

print(df)

Возвращает:

Запуск кода показывает, что исходный кадр данных был изменен и был добавлен столбец.

   A  B  C   D
0  1  4  7  12
1  2  5  8  15
2  3  6  9  18

Ожидаемое поведение:

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

    A   B   C
0   1   4   7
1   2   5   8
2   3   6   9

Настройка:

  • Python 3.7
  • Pandas 0.25.3
  • Windows 10

1 Ответ

1 голос
/ 11 марта 2020

Вы можете сделать локальную копию:

def func(d):
    df = d.copy()
    df['D'] = df['A'] * df['B'] / df['C']
    return df
...