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

2024-04-25 05:18:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个dict,需要用一个方法返回的值填充它。方法使用在方法之前定义的两个列表来搜索传递的参数是否存在于列表中。但是,无法从方法中访问列表?“未定义变量“它告诉我它们两个。我指的两个列表是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

Tags: 方法infrom列表if定义dictticker
2条回答

您应该确保在定义函数之前可以访问它们。你知道吗

nbBUYlist = []
dbBUYlist = []

#code to populate both lists from webscraping

print (nbBUYlist) # <       - added
def tickervalue(self, ticker):
    # ...

如果print抛出相同的错误,则意味着python无法定位该范围内的列表。如果它们位于不同的.py文件中,则必须导入它们。e、 克:

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函数是类的一部分,那么print()前面的tickervalue将无法工作。相反,我建议您发布一个可能更完整的代码示例,因为在没有更多上下文的情况下进行协调很有挑战性。你知道吗

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

class Foo():
    nbBUYlist = []
    dbBUYlist = []

    def tickervalue(self, ticker):
        # Get with self
        return (ticker in self.nbBUYlist) + (ticker in dbBUYlist)

此代码有多处错误。我不知道为什么你不能访问变量,下面的代码在我的机器上工作。你知道吗

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

相关问题 更多 >