解锁Streamlit中的会话状态的力量(1/2)
探索Streamlit中会话状态的潜力(上)
一个实际例子

介绍
Streamlit由于在最低限度的投入下促进了Web应用程序的开发效率而迅速受到欢迎。虽然Streamlit简化了创建交互式应用程序的过程,但某些项目可能需要更复杂的功能。本博客文章旨在探讨Streamlit中的“会话状态”概念,并展示其在功能性和用户体验方面开发可与其他应用程序媲美的应用程序的潜力。
什么是会话状态?
在深入研究实用元素之前,建立对Streamlit包中会话状态概念的全面理解至关重要。
如官方文档所述:
会话状态是在每个用户会话中共享变量的一种方式。除了存储和持久化状态的能力外,Streamlit还提供了使用回调函数操作状态的能力。会话状态还在多页面应用内持久存在。
为什么会提到“重新运行”?
为了尽可能通用,答案是每当用户与某些内容(例如按钮)进行交互时,整个代码都会重新运行。重新运行代码时,包含的变量可能会发生更改。在某些应用程序中,能够在重新运行之间保留某些变量的值并根据需要进行交替非常重要。这就是会话状态的重要性。这是我们存储在不同重新运行之间的“信息”的地方。
如何使用会话状态?
那么,我们直接看一些导入必要库的代码:
import streamlit as st
可以轻松访问会话状态以更新它或在内部创建新变量:
st.session_state.data["test_var"] = True
在上述示例中,添加了一个新的键,“data”,其值为“test_var”,并且其值为True。您可以像使用任何其他变量一样在代码中轻松使用这个新变量:
st.text_input("输入您的信息:", session_state.data.test_var)
利用会话状态实现复杂功能
使用会话状态在管理用户会话、处理表单提交和监控应用程序状态等方面具有优势。用户可以通过使用会话状态变量生成条件逻辑,从而实现对应用程序内容的动态修改。
在此示例中,使用回调函数。让我们创建一个简单的应用程序,使用回调函数计算一个数字的平方。以下是如何实现的片段:
if "user_number" not in st.session_state: st.session_state["user_number"] = 0if "square_result" not in st.session_state: st.session_state["square_result"] = 0# 创建一个回调函数def calculate_square(): st.session_state["square_result"] = st.session_state.user_number**2# 创建一个用户输入字段st.session_state.user_number = st.number_input( "请输入一个数字:", value=st.session_state.user_number)# 添加一个按钮来触发计算button = st.button("计算平方", on_click=calculate_square)st.write( f"{st.session_state.user_number}的平方是{st.session_state.square_result}")
您也可以使用类似下面的方式(根据您的编码偏好)而不是使用“on_click”参数:
# 添加一个按钮来触发计算if st.button("计算平方") calculate_square()
上面的示例应用程序如下所示:

结论
通过利用Streamlit的会话状态功能,开发者可以增加其应用程序的功能和用户体验,以与更复杂的框架竞争。通过利用会话状态的能力,可以将Streamlit项目的性能和功能提升到更高的水平。亲身体验开发动态和交互式应用程序的潜力,对产生深远影响的建设优秀应用程序的机会保持开放态度并开始创业。