在代码中无法理解vars()的作用。

11 浏览
0 Comments

在代码中无法理解vars()的作用。

在这段代码中,我正在共享通过用户自定义函数下载的多个股票数据,并且用户定义的函数将数据存储为CSV格式。然后,我们需要计算一些统计数据,如命中率、每日回报率、交易总数和其他一些问题,这并不是问题。问题出在下面的代码中,教师使用了vars()函数,似乎每个股票数据框都存储在该vars()对象中,然后调用一些操作,例如计算每个股票数据框中值的len可以通过添加vars()并在每个数据框上应用操作来完成。如果有人能够详细解释下面代码中vars()的作用以及它是什么,那将是很好的。我能够理解代码vars(),但不清楚它的作用。

stocks = ['MSFT','IBM', 'GM', 'ACN', 'GOOG']
end=datetime.datetime.now().date() 
start=end-pd.Timedelta(days=365*5) # 从'IEX'只能下载五年的历史数据
def hist_data(stocks):
    stock_df=web.DataReader(stocks,'iex',start,end)
    stock_df['Name']=stocks
    fileName=stocks+'_data.csv' # 这段代码实际上是给stocks变量中的每个股票名称添加'_data.csv',通过这样做,我们将能够将下载的每个个股数据写入CSV格式
    stock_df.to_csv(fileName) # 将每个个股数据写入CSV格式
with futures.ThreadPoolExecutor(len(stocks)) as executor:
    result=executor.map(hist_data,stocks)
print('completed')
all_stats=[]
for stock in stocks:
    df = pd.read_csv(stock+'_data.csv',index_col=0)
    df.columns
    df['Daily returns'] = df['close'] /df['open'] -1
    vars()['df_'+stock] = df.copy()
    #计算亏损和盈利交易
    loss=np.where(vars()['df_'+stock]['Daily returns']<0) # 所以你看到这段代码首先调用了数据框'df_'+stock,因此一个个股数据存储在其中,我们为每个股票数据框命名
    profit=np.where(vars()['df_'+stock]['Daily returns']>0)
    #计算交易次数
    total_trades = len(vars()['df_' + stock]) # 因为我们每天都在交易,所以可以计算数据框的长度
    loss_trades = len(loss[0]) # [0]这个参数是必要的,因为没有它,代码将返回零
    profit_trades = len(profit[0])
    #计算命中率
    hit_ratio= profit_trades/(loss_trades + profit_trades)
    total_returns=np.cumsum(vars()['df_'+stock]['Daily returns'])    
    vars()['df_'+stock]['Cum Returns']=total_returns 
    stats=[stock,hit_ratio,total_returns[len(total_returns)-1]]
    all_stats.append(stats)
    headings=['Stock Name','Hit Ratio','Final Return']
    #最终的计算结果
    final_result=pd.DataFrame(all_stats, columns=headings)
    plt.plot(vars()['df_'+stock].index.values,vars()['df_'+stock]['Cum Returns'],label=stock)
    plt.legend()
#结果如预期

0
0 Comments

在代码中使用vars()来命名另一个变量的方法并不常见,而且在可读性和可靠性方面通常都不如使用字典。但是,如果在代码中使用vars()出现了问题,可能是由于以下原因之一:

1. 变量名的定义不清晰:如果在使用vars()时没有明确指定变量名,可能会导致混淆和错误。解决方法是确保在使用vars()时明确指定变量名,这样可以避免歧义和错误。

2. 变量不存在:如果使用vars()来引用一个不存在的变量,代码将会出错。解决方法是在使用vars()之前,确保所引用的变量已经被定义和赋值。

3. 变量作用域的问题:在某些情况下,可能会出现变量作用域的问题,导致使用vars()无法正确引用变量。解决方法是确保变量的作用域正确,并且在使用vars()之前先确认变量的可访问性。

总结起来,使用vars()来命名变量的方法并不常见,而且在可读性和可靠性方面通常都不如使用字典。如果在代码中使用vars()出现了问题,可能是由于变量名定义不清晰、变量不存在或变量作用域的问题。解决方法是明确指定变量名、确保变量已定义和赋值,并确认变量的作用域正确。通过这些方法,可以避免vars()的问题,并提高代码的可读性和可靠性。

0