Streamlit
1 Introduction to Streamlit
1.1 What is Streamlit?
1.2 Why use Streamlit?
1.3 Setting up the environment
1.4 Creating your first Streamlit app
2 Basic Components
2.1 Text elements
2.1 1 Displaying text
2.1 2 Formatting text
2.2 Data display elements
2.2 1 Displaying data frames
2.2 2 Displaying tables
2.3 Input widgets
2.3 1 Text input
2.3 2 Number input
2.3 3 Date input
2.3 4 Dropdown selection
2.3 5 Slider
2.3 6 Checkbox
2.3 7 Radio buttons
2.3 8 Buttons
3 Advanced Components
3.1 Interactive widgets
3.1 1 Multiselect
3.1 2 File uploader
3.1 3 Color picker
3.2 Media elements
3.2 1 Displaying images
3.2 2 Displaying videos
3.2 3 Displaying audio
3.3 Chart elements
3.3 1 Line chart
3.3 2 Bar chart
3.3 3 Area chart
3.3 4 Scatter chart
3.3 5 Map chart
4 Layout and Styling
4.1 Layout components
4.1 1 Columns
4.1 2 Tabs
4.1 3 Expander
4.2 Styling elements
4.2 1 Custom CSS
4.2 2 Theming
4.2 3 Adding custom fonts
5 State Management
5.1 Session state
5.1 1 Managing state across reruns
5.1 2 Persisting state
5.2 Caching
5.2 1 Caching functions
5.2 2 Caching data
6 Deployment
6.1 Deploying to Streamlit Sharing
6.1 1 Setting up Streamlit Sharing
6.1 2 Deploying your app
6.2 Deploying to other platforms
6.2 1 Deploying to Heroku
6.2 2 Deploying to AWS
6.2 3 Deploying to Google Cloud
7 Best Practices
7.1 Writing clean and maintainable code
7.2 Optimizing performance
7.3 Handling errors and exceptions
7.4 Version control with Git
8 Advanced Topics
8.1 Integrating with other libraries
8.1 1 Integrating with Pandas
8.1 2 Integrating with Plotly
8.1 3 Integrating with TensorFlow
8.2 Building complex apps
8.2 1 Creating multi-page apps
8.2 2 Handling authentication
8.2 3 Building interactive dashboards
8.3 Custom components
8.3 1 Creating custom widgets
8.3 2 Extending Streamlit with custom components
9 Case Studies
9.1 Building a data exploration app
9.2 Building a machine learning model deployment app
9.3 Building a real-time data visualization app
5 2 1 Caching Functions Explained

2 1 Caching Functions Explained

Key Concepts

Caching

Caching in Streamlit involves storing the results of expensive function calls so that they can be reused without recomputation. This improves performance by reducing the time spent on redundant calculations.

st.cache

st.cache is a decorator provided by Streamlit to cache the output of a function. When a cached function is called with the same arguments, Streamlit returns the cached result instead of re-executing the function.

Example:

import streamlit as st

@st.cache
def expensive_computation(a, b):
    return a * b

result = expensive_computation(10, 20)
st.write(result)
    

Cache Expiry

Cache expiry refers to the mechanism that invalidates cached data after a certain period or condition. This ensures that the cached data remains up-to-date and relevant.

Example:

import streamlit as st
import time

@st.cache(ttl=60)
def get_data():
    time.sleep(5)  # Simulate an expensive operation
    return "Data fetched at " + time.ctime()

data = get_data()
st.write(data)
    

Cache Keys

Cache keys are unique identifiers used to store and retrieve cached data. Streamlit automatically generates cache keys based on the function's arguments, but you can also specify custom keys for more control.

Example:

import streamlit as st

@st.cache(hash_funcs={list: id})
def process_data(data):
    return [item * 2 for item in data]

data = [1, 2, 3, 4]
processed_data = process_data(data)
st.write(processed_data)
    

Analogies

Think of caching as a memo pad where you jot down the results of complex calculations. The next time you need the same result, you can simply look it up on the memo pad instead of recalculating it. The memo pad is like the cache, and the memo entries are like the cached results. Cache expiry is like setting an expiration date on the memo entries to ensure they are still valid.

By mastering caching functions in Streamlit, you can significantly improve the performance of your applications by avoiding redundant computations and ensuring that your data remains up-to-date.