在保留对全局变量所做的更改时需要帮助

时间:2018-06-15 17:47:54

标签: python-3.x

当执行所述函数时,当没有globalnonlocal语句出现时,对函数内部的全局变量所做的更改将被保留时,我感到很困惑。

import pandas as pd
import numpy as np

d = {'col1': [1, 2], 'col2': [3, 4]}
e = {'col3': [5, 7], 'col4': [8, 9]}
df = pd.DataFrame(data=d)
dfe = pd.DataFrame(data=e)

print("function 1:")
def func1(df_name):
    df_name = df_name + 1
    df_name.drop(df_name.columns[0], axis=1, inplace=True)
    print("inside function:\n", df_name)
func1(df)
print("outside function:\n", df)
print("\n")

print("function 2:")
def func2(df_name, col_name):
    df_name['col6'] = df_name[col_name] + 1
    print("inside function:\n", df_name)
func2(df, "col1")
print("outside function:\n", df)
print("\n")

print("function 3:")
def func3(df_name1, df_name2):
    df_name1 = pd.concat([df_name1, df_name2], axis=1)
    print("inside function:\n", df_name1)
func3(df, dfe)
print("outside function:\n", df)

输出:

function 1:
inside function:
    col2
0     4
1     5
outside function:
    col1  col2
0     1     3
1     2     4

function 2:
inside function:
    col1  col2  col6
0     1     3     2
1     2     4     3
outside function:
    col1  col2  col6
0     1     3     2
1     2     4     3

function 3:
inside function:
    col1  col2  col6  col3  col4
0     1     3     2     5     8
1     2     4     3     7     9
outside function:
    col1  col2  col6
0     1     3     2
1     2     4     3

代码中的函数1表明,不会保留向数据框添加一些值并删除列,这是预期的。功能2显示将保留添加新列 - 这对我来说是一个惊喜。功能3,我认为只是添加列的另一种方式,显然不会保留col3col4。函数2中正在进行什么样的命名空间监狱?在其他情况下,我会再次看到这种现象吗?感谢。

顺便说一句,故意这些函数都没有明确的回报,因为我试图了解正在发生的事情。我知道这可能不是最好的做法。

1 个答案:

答案 0 :(得分:0)

df_name是一个函数参数。

  1. func1
  2. df_name = df_name + 1更改local df_name版本的引用,因此原始变量未经修改。

    func3

    相同
    1. func2
    2. df_name['col6']实际上改变了原始变量。不是参考。因此,更改的值将在函数结束后反映出来。

      如果您需要更改全局变量,请不要将其作为参数传递,并在修改添加global variable_name行之前。

      了解更多hereinteresting