带有函数的变量范围[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有函数的变量范围[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
试图通过函数调用来理解变量范围。
代码讨论。
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)
- df_full是全球性的。正确?
- df_another是全球性的。正确?
- df是Add_a_column的本地。正确?
当我执行代码时,列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?
答案
df_full
的引用被传递给函数。所以df
和df_full
是同一个对象,这意味着它们都会在修改后被修改。
您需要将您的功能更改为:
def Add_a_column(df):
df = df.copy()
df['Col2']= np.sign(np.random.randn(len(df)))
return df
或者,您可以使用像Add_a_column(df.copy())
这样的复制函数调用该函数
另一答案
- df_full是全球性的。正确?
- df_another是全球性的。正确?
- df是Add_a_column的本地。正确?
听起来你理解范围就好了。每个变量都有您描述的范围。
你缺少的那一块是df_full
和df
也指的是同一个物体。使用一个变量对该对象进行更改时,使用另一个变量访问该对象时,更改是可见的。
以上是关于带有函数的变量范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章