当执行所述函数时,当没有global
或nonlocal
语句出现时,对函数内部的全局变量所做的更改将被保留时,我感到很困惑。
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,我认为只是添加列的另一种方式,显然不会保留col3
和col4
。函数2中正在进行什么样的命名空间监狱?在其他情况下,我会再次看到这种现象吗?感谢。
顺便说一句,故意这些函数都没有明确的回报,因为我试图了解正在发生的事情。我知道这可能不是最好的做法。
答案 0 :(得分:0)
df_name
是一个函数参数。
func1
: df_name = df_name + 1
更改local
df_name
版本的引用,因此原始变量未经修改。
func3
func2
: df_name['col6']
实际上改变了原始变量。不是参考。因此,更改的值将在函数结束后反映出来。
如果您需要更改全局变量,请不要将其作为参数传递,并在修改添加global variable_name
行之前。
了解更多here,interesting。