我以为我了解变量的全局范围与局部范围,但我正在努力解决一个问题。
这是我要实现的功能:
def login_table(id_name_verified,id_password):
"""
:param id_name_verified: (DataFrame) DataFrame with columns: Id,Login,Verified.
:param id_password: (numpy.array) Two-dimensional NumPy array where each element
is an array that contains: Id and Password
:returns: (None) The function should modify id_name_verified DataFrame in-place.
It should not return anything.
goal : in id_name_verified,'Verified' column should be removed and password should be added from id_password with corresponding id and the column be named password
"""
Test:
import pandas as pd
import numpy as np
def login_table(id_name_verified,id_password):
id_name_verified.drop(columns="Verified",inplace=True)
password = pd.DataFrame(id_password)
password.columns = ["Id","Password"]
id_name_verified =id_name_verified.merge(password,on=['Id'])
id_name_verified = pd.DataFrame([[1,"JohnDoe",True],[2,"AnnFranklin",False]],columns=["Id","Login","Verified"])
id_password = np.array([[1,987340123],187031122]],np.int32)
login_table(id_name_verified,id_password)
print(id_name_verified)
预期输出:
Id Login Password
0 1 JohnDoe 987340123
1 2 AnnFranklin 187031122
我得到的输出:
Id Login
0 1 JohnDoe
1 2 AnnFranklin
在pycharm上运行此命令时,我发现问题出在函数的最后一行,其中id_name_verified
被标识为来自外部范围。
This inspection detects shadowing names defined in outer scopes.
如果我没有定义一个函数,它将起作用,所以我想我对传递给函数的参数的理解有些遗漏;有什么建议吗?