python - 具有功能的可变范围

标签 python scope

<分区>

尝试通过函数调用了解变量作用域。

要讨论的代码。

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 是本地的。正确吗?

当我执行代码时,该列被添加到 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()) 的复制函数来调用该函数

关于python - 具有功能的可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48027375/

相关文章:

python - Docsify 文档的基本 Flask 实现

c# - 同一应用程序中的多个静态变量范围?

python - Python 中循环的奇怪行为

python - 如何设置计算移动平均线的开始时间和结束时间?

python - 如果每个元组中的第二项重复,如何从元组列表中删除元素?

python - Pandas 过滤 float 到数字

python - 类型错误 : unsupported operand type(s) for//: 'int' and 'graph'

c++ - Visual Assert 的范围问题

javascript - 功能/对象的范围

C++虚函数忽略范围说明符