列表定义的外部方法无法在内部访问?

时间:2019-08-16 13:22:20

标签: python function dictionary

我有一个字典,需要用方法返回的值填充。该方法使用在方法之前定义的两个列表,以搜索所传递的参数是否存在于列表内。但是,无法从方法内部访问列表吗? “未定义的变量”告诉我他们两个。我要指的两个列表是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

2 个答案:

答案 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()之前无法使用。相反,我建议您发布一个可能更完整的代码示例,因为在没有更多上下文的情况下进行协调很困难。

正如评论中指出的那样,如果您在类中定义了tickervaluenbBUYlist,则需要这样访问它们:

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