为什么这里的Streamlit会输出None?
以下代码
import streamlit as st
def main(name="World"):
st.write(f"Hello {name}!")
if __name__ == "__main__":
name = None
main(name) if name else main()
st.write("The end.")
输出
Hello World!
NoneThe end.
在浏览器中。
None 从哪里来?
如果我把三元运算符改写为
if name:
main(name)
else:
main()
那么 None 就消失了。为什么会这样?
解决方案
A if B else C 表达式在 B 为“truthy”时返回 A,否则返回 C。Streamlit会打印该表达式的结果(因为Streamlit看到整行都是一个表达式,默认你想显示它),由于它是一个不返回值的函数,所以结果是 None。
if/else statements 会在这里更合适,因为你其实并不关心函数的返回值:
if name:
main(name)
else:
main()
然而,在我看来,这应该由 function 来处理,而不是调用者。你可以通过将 None 作为默认值来替代字符串来实现:
def main(name=None):
if name is None:
name = "World"
st.write(f"Hello {name}!")
或者,如果这是你唯一使用 name 的地方:
def main(name=None):
st.write(f"Hello {name or 'World'}!")
那么你只需要调用:
main(name)
如果 name 是 None,那么字符串中就会使用 "World"。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。