python系列&deep_study系列:Gradio中文教程(十一)State in Blocks
Gradio中文教程(十一)State in Blocks
Gradio中文教程(十一)State in Blocks
块中的状态
我们已经在接口中介绍了状态,本指南将探讨块中的状态,它与接口中的状态大部分相同。
全局状态
块中的全局状态与接口中的全局状态相同。在函数调用之外创建的任何变量都是所有用户之间共享的引用。
会话状态
Gradio
支持会话状态,在块应用中,数据在同一页面会话内的多次提交之间保持不变。重申一下,会话数据不会在您的模型的不同用户之间共享。要在会话状态中存储数据,您需要做三件事:
-
创建一个
gr.State()对象
。如果这个有状态对象有一个默认值,将其传递给构造函数。 -
在事件监听器中,将
State对象
作为输入和输出。 -
在事件监听器函数中,将变量添加到输入参数和返回值中。
让我们来看一个吊人游戏的例子。
import gradio as gr
secret_word = "gradio"
with gr.Blocks() as demo:
used_letters_var = gr.State([])
with gr.Row() as row:
with gr.Column():
input_letter = gr.Textbox(label="Enter letter")
btn = gr.Button("Guess Letter")
with gr.Column():
hangman = gr.Textbox(
label="Hangman",
value="_"*len(secret_word)
)
used_letters_box = gr.Textbox(label="Used Letters")
def guess_letter(letter, used_letters):
used_letters.append(letter)
answer = "".join([
(letter if letter in used_letters else "_")
for letter in secret_word
])
return {
used_letters_var: used_letters,
used_letters_box: ", ".join(used_letters),
hangman: answer
}
btn.click(
guess_letter,
[input_letter, used_letters_var],
[used_letters_var, used_letters_box, hangman]
)
demo.launch()
让我们看看在这个游戏中我们如何完成上述三个步骤:
-
我们将已使用的字母存储在
used_letters_var
中。在State
的构造函数中,我们将这个的初始值设置为[],一个空列表。 -
在
btn.click()
中,我们在输入和输出中都有一个对used_letters_var
的引用。 -
在
guess_letter
中,我们将这个State
的值传递给used_letters
,然后在返回语句中返回这个State
的更新值。
对于更复杂的应用,您可能会有许多存储在单个块应用中的会话状态的状态变量。
在文档中了解更多关于State的信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)