带有函数的变量范围[重复]

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的引用被传递给函数。所以dfdf_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_fulldf也指的是同一个物体。使用一个变量对该对象进行更改时,使用另一个变量访问该对象时,更改是可见的。

以上是关于带有函数的变量范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python嵌套函数变量范围[重复]

处理屏幕旋转上的片段重复(带有示例代码)

函数定义中的Python变量范围[重复]

我正在尝试将地理位置存储在函数范围之外的一些变量中,js [重复]

如何使用Android片段管理器传递变量[重复]

如何创建片段以重复变量编号中的代码行