将全局变量用作局部变量(在函数内部)时,如何避免无意更改全局变量?

时间:2020-03-11 19:31:25

标签: python python-3.x pandas function global-variables

问题:

我正在使用一个函数,该函数接受一个(全局)变量作为输入,然后对该变量(局部)执行操作,然后返回相同的变量。我只希望变量在本地更改,但是我的功能也正在更改全局变量。

要复制的代码:

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
  • 熊猫0.25.3
  • Windows 10

1 个答案:

答案 0 :(得分:1)

您可以制作本地副本:

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