首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将函数的输出累加到streamlit中的列表中,以使该列表持久存在?

在Streamlit中,由于其运行机制是每次用户交互都会重新执行脚本,所以普通的Python变量(如列表)在每次脚本执行时都会被重置。为了在Streamlit应用中实现数据的持久化,你可以使用以下几种方法:

方法一:使用SessionState

Streamlit提供了SessionState类,它允许你在用户的会话之间保持状态。首先,你需要安装streamlit-ss库:

代码语言:txt
复制
pip install streamlit-ss

然后在你的脚本中引入并使用SessionState

代码语言:txt
复制
from streamlit.report_thread import get_report_ctx
from streamlit.hashing import _CodeHasher
from streamlit.session_state import SessionState

class SessionState:
    def __init__(self, **kwargs):
        self.hash_funcs = {"_CodeHasher": _CodeHasher}
        self.kwargs = kwargs

    def __getattr__(self, name):
        try:
            return self.kwargs[name]
        except KeyError:
            raise AttributeError(name)

    def __setattr__(self, name, value):
        if name in ["hash_funcs", "kwargs"]:
            super().__setattr__(name, value)
        else:
            self.kwargs[name] = value

def get_session_state(**kwargs):
    ctx = get_report_ctx()
    session_id = ctx.session_id
    if not hasattr(ctx, "_custom_session_state"):
        ctx._custom_session_state = {}
    if session_id not in ctx._custom_session_state:
        ctx._custom_session_state[session_id] = SessionState(**kwargs)
    return ctx._custom_session_state[session_id]

# 使用SessionState来保持列表状态
session_state = get_session_state(my_list=[])

def add_to_list(value):
    session_state.my_list.append(value)

# 在Streamlit应用中调用add_to_list函数来累加值
add_to_list(1)
add_to_list(2)

# 显示列表内容
st.write(session_state.my_list)

方法二:使用文件或数据库

你可以将数据保存到文件或数据库中,这样即使脚本重新执行,数据也不会丢失。例如,使用CSV文件:

代码语言:txt
复制
import csv

def add_to_csv(value):
    with open('my_list.csv', 'a', newline='') as file:
        writer = csv.writer(file)
        writer.writerow([value])

# 在Streamlit应用中调用add_to_csv函数来累加值
add_to_csv(1)
add_to_csv(2)

# 读取CSV文件内容并显示
with open('my_list.csv', 'r') as file:
    reader = csv.reader(file)
    my_list = list(reader)
st.write(my_list)

方法三:使用缓存

Streamlit提供了st.cache_resource装饰器,可以用来缓存函数的结果。这对于计算密集型或I/O密集型任务特别有用。

代码语言:txt
复制
import streamlit as st

@st.cache_resource
def get_list():
    return []

my_list = get_list()

def add_to_list(value):
    my_list.append(value)

# 在Streamlit应用中调用add_to_list函数来累加值
add_to_list(1)
add_to_list(2)

# 显示列表内容
st.write(my_list)

总结

以上三种方法都可以在Streamlit中实现数据的持久化。SessionState适用于简单的状态保持,文件或数据库适用于需要长期保存的数据,而缓存则适用于优化性能。根据你的具体需求选择合适的方法。

参考链接

通过这些方法,你可以确保在Streamlit应用中函数的输出能够累加到一个持久存在的列表中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券