我有一个字典,需要用方法返回的值填充。该方法使用在方法之前定义的两个列表,以搜索所传递的参数是否存在于列表内。但是,无法从方法内部访问列表吗? “未定义的变量”告诉我他们两个。我要指的两个列表是dbBUYlist和nbBUYlist。
下面的一些代码:
nbBUYlist = []
dbBUYlist = []
#code to populate both lists from webscraping
def tickervalue(self, ticker):
recCount = 0
if ticker in dbBUYlist:
recCount + 1
if ticker in nbBUYlist:
recCount + 1
return recCount
recdict = {ticker : tickervalue(ticker) for ticker in tickers}
buyrec = pd.DataFrame.from_dict(recdict, orient = 'index', columns=['Sum']).sort_values('Sum', ascending=False)[:10]
buyrec
答案 0 :(得分:1)
您应该确保可以在定义功能之前 访问它们。
nbBUYlist = []
dbBUYlist = []
#code to populate both lists from webscraping
print (nbBUYlist) # <--------------- added
def tickervalue(self, ticker):
# ...
如果print
抛出相同的错误,则意味着python无法在该范围内找到列表。如果它们在不同的.py
文件中,则必须导入它们。例如:
import module_with_lists;
print(module_with_lists.nbBUYlist)
Python跟踪加载到每个“ python文件”(称为模块)中的对象,并需要告知在哪里使用哪些项目。
如果变量是在同一模块中定义的,则可以尝试使用functools.partial
以确保将列表传递到函数的范围。
import functools
# | | <- defined in partial
def tickervalue(self, nb_list, db_list, ticker):
return (ticker in nb_list) + (ticker in db_list)
# Creates a function that has the first two arguments always supplied
ticker_function = functools.partial(tickervalue, nbBUYlist, dbBUYlist)
# Use the function returned from that partial
recdict = {ticker : ticker_function(ticker) for ticker in tickers}
编辑:在函数调用中使用self
时,值得指出的是,如果tickervalue
函数是类的一部分,那么显然{{1} } print()
之前无法使用。相反,我建议您发布一个可能更完整的代码示例,因为在没有更多上下文的情况下进行协调很困难。
正如评论中指出的那样,如果您在类中定义了tickervalue
和nbBUYlist
,则需要这样访问它们:
dbBUYlist
答案 1 :(得分:0)
此代码有很多错误。我不确定为什么您不能访问变量,以下代码可在我的机器上运行。
nbBUYlist = []
dbBUYlist = []
#code to populate both lists from webscraping
def tickervalue(ticker): # remove self
recCount = 0
if ticker in dbBUYlist:
recCount += 1 # missing equals sign
if ticker in nbBUYlist:
recCount += 1 # missing equals sign
return recCount
recdict = {ticker : tickervalue(ticker) for ticker in tickers} # tickers is never defined, not sure what you mean here
buyrec = pd.DataFrame.from_dict(recdict, orient = 'index', columns=['Sum']).sort_values('Sum', ascending=False)[:10]
buyrec