尝试通过函数调用来理解变量范围。
要讨论的代码。
import numpy as np
import pandas as pd
# Function to add a column with random stuff to a dataframe
def Add_a_column(df):
df['Col2']= np.sign(np.random.randn(len(df)))
return df
# Create a dataframe with random stuff
df_full = pd.DataFrame(data=np.sign(np.random.randn(5)), columns=['Col1'])
df_another = Add_a_column(df_full)
当我执行代码时,列get被添加到df_full
In[8]: df_full
Out[8]:
Col1 Col2
0 -1.0 -1.0
1 1.0 -1.0
2 -1.0 1.0
3 1.0 1.0
4 1.0 1.0
如何避免函数修改df_full?
答案 0 :(得分:1)
translationField()
的引用传递给函数。因此df_full
和df
是同一个对象,这意味着它们在修改后都会被修改。
您需要将功能更改为:
df_full
或者,您可以使用复制的函数def Add_a_column(df):
df = df.copy()
df['Col2']= np.sign(np.random.randn(len(df)))
return df
答案 1 :(得分:0)
- df_full是全球性的。正确的吗?
- df_another是全球性的。正确的吗?
- df是Add_a_column的本地。正确的吗?
听起来你理解范围很好。每个变量都有您描述的范围。
您遗失的部分是df_full
和df
也指的是同一个对象。使用一个变量对该对象进行更改时,使用另一个变量访问该对象时,更改是可见的。