錄
Web 開發正在成為 IT 中最受歡迎的領域之一,毫無疑問,JavaScript 和 Python 都是 Web 開發人員中非常流行的編程語言。這兩種編程語言都有自己的優點,這使它們成為開發人員的熱門選擇。
然而,Python 和 JavaScript 的比較一直是開發者社區的熱門討論。它經常會產生這樣的問題:python 比 javascript 難嗎?python比javascript好嗎?python和javascript有什么區別?javascript在Web開發中的用途是什么?等等等等。繼續閱讀本文,因為本文簡要回答了所有這些問題,但在討論這些編程語言在 Web 開發中的比較之前,了解什么是 Python 和 JavaScript 至關重要。
Python 是當今最好和最強大的編程語言之一。它用途廣泛,是大多數科學應用的必備工具。但是,它是一種通用編程語言,支持不同的編程范式。
這種編程廣泛用于科學領域,包括數據科學、人工智能、計算機視覺 (CV)、DIP(數字圖像處理)、自然語言處理和 Web 開發。Python 的語法非常簡單。這就是為什么很多人認為 python 比 javaScript 好得多的原因。
在 web 開發的背景下,有一個流行的問題:python 是用于前端還是后端?答案是python主要用于后端。這是我們可以將其功能和能力與 JavaScript 進行比較的地方。但是,需要注意的是,Python 不僅限于后端開發,還可以在一些附加工具的幫助下用于前端開發。
雖然 Python 是后端開發的絕佳選擇,但 JavaScript 是首選,并且通常被稱為 Web 應用程序前端開發的編程語言。
在這里了解后端和前端開發之間的區別很重要。Web 應用程序的后端是用戶無法訪問且用戶不直接與其交互的部分。它包含 Web 應用程序的所有業務邏輯和服務器端編程。
另一方面,Web 應用程序的前端是最終用戶與之交互的部分。這是用戶可以訪問的應用程序的一部分。即使您正在與移動應用程序交互,您也很可能正在與 React.js(一個 JavaScript 框架)進行交互,它能夠開發能夠適應不同平臺的應用程序。
現在,由于我們已經清楚地了解了 JavaScript 和 Python,我們可以更深入地挖掘它們的差異化因素。
我們可以根據不同的理由來區分這兩種編程語言。python 和 JavaScript 都有各自的優缺點。因此,讓我們立即開始吧。
首先,重要的是要注意開發人員社區對這兩種編程語言的看法。確定開發人員選擇的最佳矩陣是評估這些編程語言的流行程度。
根據Stack Overflow 的 2020 年開發者調查,JavaScript 在最常用的編程語言列表中名列前茅。根據調查的詳細信息,幾乎 69.7% 的開發社區使用 JavaScript。相比之下,Python 的普及率在 41.7% 的開發者中。
JavaScript 流行的一個原因是它的工作可以廣泛使用。此外,它不僅可用于 Web 開發,而且 JavaScript 還可用于移動應用程序開發,這使其成為開發社區中的熱門選擇。
性能是開發網站時要牢記的最重要因素之一。如果應用程序不夠高效,它幾乎是無用的。這就是新的編程語言試圖灌輸盡可能多的效率和優化的原因。
然而,這并不容易,而是一項非常棘手的任務。這也取決于用于開發的編程語言。因為每種編程語言都有自己的內置規則和方法來提高效率。
Web 應用程序的速度取決于 Web 應用程序中代碼的執行速度。構建 JavaScript 的目的是在 Web 瀏覽器上快速運行。這就是 Facebook、Google、Amazon 等應用程序使用 JavaScript 的原因。
如果將 Python Web 應用程序與 Node.js Web 應用程序進行比較,Node.js 肯定會勝過 Python。因為據專家介紹,Python 在單個流中處理請求,但 JavaScript 可以利用其先進的多線程功能一次處理多個請求。
對于一個人來說,Web 應用程序的可擴展性就像氧氣一樣是生存所必需的??紤]一個應用程序,該應用程序響應速度快、交互性強,并提供非常需要的服務。但是,它無法同時處理大量請求。這將導致網絡流量下降,因為如果用戶打開一個網站并且它沒有按需要響應或經常崩潰,但用戶最終也會尋找其他一些快速的替代方案。
因此,應用程序的可擴展性非常重要。因為可伸縮性允許應用程序一次處理大量的流量和請求。為了支持可擴展性,多線程是一個非??尚械慕鉀Q方案。但是 Python 不支持多線程,因為它適用于單線程系統。相反,它使用全局解釋器鎖來一次處理多個請求。
相反,Node.js 純粹是為了支持異步編程而開發的。因此,JavaScript 在 Web 應用程序可擴展性方面表現出色。但是,Python 也可以通過上述方式實現可擴展性。
內存管理是另一個需要考慮的重要方面。如果一種編程語言不能有效地管理內存,將直接影響網站的優化。
在 Python 中,所有變量和數據結構都收集在一個堆中。Python 也有它的內部內存管理器來確保對這個堆的管理。
但是,JavaScript 使用一種稱為 GC(垃圾收集器)的自動內存管理工具。但是,GC 的管理工作在一個近似算法上,因為它無法知道某個內存位置是否無用。
編程語言的范圍定義了它的多功能性。如果我們談論 Python 的應用程序或用例,我們就會知道 Python 用于后端的 Web 開發。它在軟件開發、計算和腳本系統中也非常有用。它在數據科學和機器學習中非常流行。
相比之下,JavaScript 也支持所有這些類型的軟件開發。JavaScript 相對于 python 的最大優勢在于,它不僅是一種前端語言,而且在開發應用程序的服務器端邏輯時也能工作得非常好。此外,JavaScrip 還用于開發移動應用程序,目前 Python 不支持。React.js 是流行的移動應用程序開發框架之一。
根據上面進行的討論,很明顯這兩種語言都有自己的優缺點。幾乎不可能質疑 Python 是否會取代 JavaScript,反之亦然。
對于 JavaScript 和 Python,開發人員的選擇將基于所考慮平臺的要求。例如,當語言的設計至關重要時,Python 是您的選擇。如果需要移動開發和高度響應的網站,那么 JavaScript 是您的選擇。
更全面地說,如果所需的應用程序必須具有可擴展性和高效性,那么 JavaScript 是正確的選擇。而如果網站后臺非常復雜,可讀性好,又要求編程簡單,可以選擇Python。
請耐心慢慢刷新到頁面完整顯示出來
https://fjxasdf.github.io/daogou/
原文章https://www.toutiao.com/i6711294610594857476/
1.顯示商品圖片
2.沒有顯示全部商品,只顯示熱門商品,避免數據、圖片加載太慢
3.樣式稍微美化了
4.上傳到GitHub,不過GitHub很卡,要刷新等好久才能看到
import xlrd from datetime import date,datetime import json file='精選優質商品清單(內含優惠券).xls' def read_excel(): wb=xlrd.open_workbook(filename=file)#打開文件 # print(wb.sheet_names())#獲取所有表格名字 sheet1=wb.sheet_by_index(0)#通過索引獲取表格 # sheet2=wb.sheet_by_name('Page1')#通過名字獲取表格 # print(sheet1) # print(sheet2) # print(sheet1.name) #表 名 rows=sheet1.nrows #多少行 # print(sheet1.ncols) #多少列 # rows=sheet1.row_values(1)#獲取行內容 category0=sheet1.col_values(4)#獲取列內容(類目) del category0[0] category=sorted(set(category0),key=category0.index) #類目列表->去重 data=[] data_hot=[] # print(rows) # print(cols) for i,v in enumerate(category): category[i]=v.replace("/", "、")#吧"/"替換"、" data.append([category[i],[]]) jsonData=json.dumps(category, ensure_ascii=False) with open('./daogou/category.json', 'w',encoding="utf-8") as f: f.write(jsonData)#保存分類json for i,v in enumerate(data): for x in range(rows): if v[0]==(sheet1.cell(x,4).value.replace("/", "、")): xo=sheet1.row_values(x) y=[xo[1],xo[2],xo[4],xo[6],xo[21]] #選擇保存商品名稱、圖片、鏈接等 data[i][1].append(y) if x>0 and float(sheet1.row_values(x)[9]) >=1: #選擇傭金多的作為熱門 xo=sheet1.row_values(x) y=[xo[1],xo[2],xo[4],xo[6],xo[21]] data_hot.append(y) data_hot=data_hot[:24] jsonData_hot=json.dumps(data_hot, ensure_ascii=False) with open('./daogou/results_hot.json', 'w',encoding="utf-8") as f: f.write(jsonData_hot)#保存熱門商品json for i,v in enumerate(data): jsonData=json.dumps(v[1], ensure_ascii=False) with open('./daogou/'+v[0]+'.json', 'w',encoding="utf-8") as f: f.write(jsonData)#保存每個分類商品json # jsonData1=json.dumps(data, ensure_ascii=False) # with open('results.json', 'w',encoding="utf-8") as f: # f.write(jsonData1) # print(sheet1.cell(0,0).value)#獲取表格里的內容,第一行第一個格內容 # print(sheet1.cell_value(0,0))#獲取表格里的內容,第一行第一個格內容 #print(sheet1.row(0)[0].value)#獲取表格里的內容,第一行第一個格內容 if __name__=='__main__': read_excel()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="../js/jquery.min.js"></script> <link rel="stylesheet" href="../font/Alibaba-PuHuiTi-Regular.css"> <script> var navo=''; var info=''; var data_total;//總數據 function color16(){//十六進制顏色隨機 var r=Math.floor(Math.random()*256); var g=Math.floor(Math.random()*256); var b=Math.floor(Math.random()*256); var color='#'+r.toString(16)+g.toString(16)+b.toString(16); return color; } function nav_href(title,id){//錨跳轉 if ($('#'+title).length>0) { location.href="#"+title; }else{ var div_title="<div id='"+title+"' style='float:left;'>"; var div_content="<div class='pro_img' style='background:#ff5000'><b style='color:#FFF'>"+title+"</b><\/div>"; $('#load').show(); $.get('./'+title+'.json', function(data) { $.each(data, function(index, val) { div_content+="<a style='background:"+color16()+"' target='_blank' href='"+val[4]+"' class='pro_img'><img onload='$(this).show()' src="+val[1]+" style='width:100%;height:100%;display:none;' />"+val[0]+"<span class='money'>¥"+val[3]+"</span><span class='title'>"+val[0].substring(0,25)+"...</span><\/a>"; if ((index+1)==data.length) { var div_footer="</div><br>"; infoo=div_title+div_content+div_footer; $('#content').append(infoo); location.href="#"+title; $('#load').hide(); } }); },'json'); } } function get_data(){ $.get('./category.json', function(data) {//導航 $.each(data, function(index, val) { // console.log(val[0]); navo+="<a class='nav' href=javascript:;nav_href(\'"+val+"\',"+index+")>"+val+"</a> "; }); $('#nav').html(navo); $.get('./results_hot.json', function(data) {//熱門商品 var div_title="<div id='熱門商品' style='float:left;'>"; var div_content="<div class='pro_img' style='background:#ff5000'><b style='color:#FFF'>熱門商品</b></span><\/div>"; $.each(data, function(index, val) { // console.log(val); div_content+="<a style='background:"+color16()+"' target='_blank' href='"+val[4]+"' class='pro_img'><img onload='$(this).show()' src="+val[1]+" style='width:100%;height:100%;display:none;' />"+val[0]+"<span class='money'>¥"+val[3]+"</span><span class='title'>"+val[0].substring(0,25)+"...</span><\/a>" // if (index==3) {return false} }); var div_footer="</div><br>"; info+=div_title+div_content+div_footer; $('#content').html(info); $('#load').hide(0); }); },'json'); } </script> <style> #body{ /*border: 1px solid #eee;*/ width: 1110px; margin:0 auto; } a.nav{ text-decoration: none; margin-right: 10px; padding: 0 5px; /*padding-bottom: 10px;*/ display: inline-block; color: #000; font-weight: 700; } #nav{ display: inline-block; } *,html,body{ font-family:"Alibaba-PuHuiTi-Regular"; } #content{ margin-top: 10px; display: inline-block; } .money{ width: 100%; /* padding: 0px 10px; */ background: #ffffffcc; position: absolute; left: 0; bottom: 50px; height: 30px; line-height: 30px; color: #F40; font-weight: 700; /* border-radius: 0 8px 0 0; */ text-align: left; font-size: 18px; } .title{ width: 100%; font-weight: 700; /* padding: 0px 10px; */ background: #ffffffcc; position: absolute; left: 0; bottom: 0; height: 50px; line-height: normal; color: #000; /* border-radius: 0 8px 0 0; */ text-align: left; font-size: 15px; } .pro_img{ position: relative; float: left; width: 220px; height: 220px; line-height: 220px; text-align: center; border: 1px solid #eee; cursor: pointer; font-size: 30px; /*white-space:normal; */ overflow:hidden; /*超過部分不顯示*/ text-overflow:ellipsis; /*超過部分用點點表示*/ /* white-space:nowrap;/*不換行*/ } .input1{ width: 300px; height: 30px; border: 1px solid #888; border-radius: 10px 0 0 10px; outline-style: none ; } .button1{ margin-left: -7px; width: 50px; height: 34px; border-radius:0 10px 10px 0 ; outline-style: none ; } #search1{ /*width: 350px;*/ /*margin:0 auto;*/ } #load{ position: fixed; width: 100%; height: 100%; top: 0; left: 0; background: #000000ad; z-index: 999; text-align: center; vertical-align: middle; } #load>span{ display: inline-block; vertical-align: middle; height: 100%; } .load{ display: inline-block; vertical-align: middle; font-size: 50px; color: #FFF; } </style> </head> <body onload="get_data()"> <!-- loading --> <div id="load"> <span ></span> <div class="load">加載中...</div> </div> <div id="body"> <h1>網站僅學習交流?。【W站中的商品信息均來自于互聯網。</h1> <!-- <div id="search1"> <input type="text" class="input1"> <button class="button1">搜索</button><b> 網站僅學習交流??!網站僅學習交流?。【W站僅學習交流??!網站僅學習交流?。【W站僅學習交流??!</b> </div> --> <div id="nav"></div> <div id="content"></div> </div> </body> </html>
文共6260字,預計學習時長13分鐘
不了解任何網頁框架?沒關系,本文將教你如何輕松搞定從數據科學項目到超棒程序的無縫轉換。
圖片來源:Cody Black Unsplash
稍作休息,開始編碼。
機器學習項目只有充分展示給公眾時才稱得上是完整的項目。
過去在介紹數據科學項目時,選擇合適的可視化操作或簡單的PPT就足夠了,但現在隨著像RShiny和Dash這類儀表盤化工具的出現,一名合格的數據科學家也需要掌握一定的Web框架的知識。
可Web框架也不是塊好啃的骨頭。筆者在嘗試一些看似簡單的操作時,仍會被HTML、CSS和Javascript等搞得暈頭轉向,于數次實踐中嘗遍失敗的滋味。
對數據科學同胞們來說,Web開發只是次要技能,所以更別提嘗試多種途徑做這一件事了,會讓這些人不知所措的。
那我們就注定避免不了Web框架的學習之路嗎?還是說大半夜的給開發人員打電話問一些很蠢的問題?
于是StreamLit帶著自身的使命出現了,它僅借助Python就能夠創建Web應用程序。
Python的宗旨:簡單勝于復雜,而Streamlit創建應用程序則完美地詮釋了其易操作性。
這篇文將為大家講解何使用Streamlit來創建支持數據科學項目的應用程序。
安裝
安裝步驟跟運行指令一樣簡單:
pip install streamlit
查看是否安裝成功時只需運行:
streamlit hello
屏幕上應該顯示的是:
可以在瀏覽器中訪問本地URL:localhost:8501,來查看執行中的Streamlit應用程序。開發人員那里也有許多很棒的樣本可供嘗試。
Streamlit“你好,世界”
Streamlit旨在通過簡單的Python代碼實現簡單的程序開發。
那就設計一款簡單的應用程序,看看它是否真的像它說的那樣。
從Streamlit的名為“hello,world”的程序入手,這個程序并不復雜。只需要復制粘貼下面這個代碼到“helloworld.py”的文件夾中即可。
import streamlit as st
x=st.slider('x')
st.write(x, 'squared is', x * x)
然后到最后運行階段時:
streamlit run helloworld.py
看吧,瀏覽器連接到localhost:8501,就可以看到執行中的程序,滑動鼠標就可以得到結果。
簡單的滑塊插件應用程序
操作非常簡單。在構建上圖應用程序時,用到了Streamlit的兩個特性:
? st.slider插件——滑動改變Web應用程序的輸出內容。
? 以及通用的st.write 指令。筆者對于它能從圖標、數據框和簡單的文本中編寫任何東西感到驚訝。后面會有詳細介紹。
敲黑板:大家要記住每次改變插件值時,整個應用程序都會由上至下運行。
Streamlit插件
插件提供了控制應用程序的方法,閱讀了解插件的最佳選擇就是API參考文檔,不過筆者這里也會講解一些插件,它們都是用戶在操作后期會用的最主要的插件。
1. 滑塊
streamlit.slider(label, min_value=None, max_value=None, value=None, step=None, format=None)
在上文已經目睹了st.slider的執行過程,它可以結合min_value、max_value使用,用于進一步得到一定范圍內的輸入內容。
2. 文本輸入
獲取用戶輸入最簡單的方式是輸入URL或一些用于分析情緒的文本內容,需要的只是一個用來命名文本框的標簽。
import streamlit as st
url=st.text_input('Enter URL')
st.write('The Entered URL is', url)
看到的程序將是這樣:
簡單的text_input widget程序
貼士:可以只改變helloworld.py文件然后刷新頁面。筆者的做法是打開該文件然后在文本編輯器中改動,再一點一點查看變動的地方。
3. 復選框
復選框的一個功能就是隱藏或顯示/隱藏程序中的特定區域,另一個用途是設置函數的布爾參數值。st.checkbox() 需要一個參數,即插件標簽。在該應用程序中,復選框會用來切換條件語句。
import streamlit as st
import pandas as pd
import numpy as np
df=pd.read_csv("football_data.csv")
if st.checkbox('Show dataframe'):
st.write(df)
簡單的復選框插件應用程序
4. 下拉框插件
通過st.selectbox可以在一系列選項或列表中進行選擇。常見的用法是將其作為下拉項然后從名單中挑選值。
import streamlit as st
import pandas as pd
import numpy as np
df=pd.read_csv("football_data.csv")option=st.selectbox(
'Which Club do you like best?',
df['Club'].unique())
'You selected: ', option
簡單的下拉框/復選框插件程序
5. 多選插件
也可以用下拉框內的多個值。這里講的是使用 st.multiselect在變量選選中獲取多個值作為列表。
import streamlit as st
import pandas as pd
import numpy as np
df=pd.read_csv("football_data.csv")
options=st.multiselect(
'What are your favorite clubs?', df['Club'].unique())
st.write('You selected:', options)
簡單的下拉框插件應用程序
一步步創建應用程序
重要插件了解的也差不多了,現在馬上要用多個插件創建應用程序。
從簡單的步驟入門,嘗試使用Streamlit對足球數據進行可視化。有了上面那些插件,這個步驟執行起來會容易很多。
import streamlit as st
import pandas as pd
import numpy as np
df=pd.read_csv("football_data.csv")
clubs=st.multiselect('Show Player for clubs?', df['Club'].unique())
nationalities=st.multiselect('Show Player from Nationalities?', df['Nationality'].unique())
# Filter dataframe
new_df=df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]
# write dataframe to screen
st.write(new_df)
簡單的應用程序會是這樣的:
同時使用多個插件
這一點也不難,但目前看起來似乎太基礎了。是否可以考慮加入一些圖表呢?
Streamlit當前支持許多用于繪圖的庫,其中就有Plotly, Bokeh, Matplotlib, Altair和Vega圖表。Plotly Express也可以,只不過沒有詳細說明。也存在一些內嵌式圖表,相當于Streamlit“自帶”的,比如st.line_chart 和st.area_chart.
此時會用到plotly_express,下面是設計程序會用到的代碼。該過程只會調用Streamlit四次。剩下的都是一些簡單的Python代碼操作。
import streamlit as st
import pandas as pd
import numpy as np
import plotly_express as px
df=pd.read_csv("football_data.csv")
clubs=st.multiselect('Show Player for clubs?', df['Club'].unique())
nationalities=st.multiselect('Show Player from Nationalities?', df['Nationality'].unique())new_df=df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]
st.write(new_df)
# create figure using plotly express
fig=px.scatter(new_df, x='Overall',y='Age',color='Name')
# Plot!
st.plotly_chart(fig)
添加圖表
改進
在本文一開始有提到插件每次發生變動時,整個應用程序就會由上至下地運行。其實并不可行,因為創建的應用程序會保留下深度學習模型或復雜的機器學習模型。接下來在講Streamlit的緩存時會向讀者闡釋這一點。
1. 緩存
在這個簡單的程序里,但凡值有所變動時,數據科學家們就會反復瀏覽數據框。它比較適用于用戶手中的小規模數據,至于大規?;蛐枰M行很多步處理的數據,它是不予理睬的。接下來在Streamlit中通過st.cache裝飾器函數體驗緩存的功能吧。
import streamlit as st
import pandas as pd
import numpy as np
import plotly_express as px
df=st.cache(pd.read_csv)("football_data.csv")
或者是復雜一些、時間耗費久一些的函數,只需要運行一次,此時可以用:
@st.cache
def complex_func(a,b):
DO SOMETHING COMPLEX
# Won't run again and again.
complex_func(a,b)
用Streamlit的緩存裝飾器標記函數時,無論這個函數是否執行,都會檢查輸入的參數值(由該函數處理的)。
如果Streamlit之前沒有處理過這些數據,它會調用函數并將運算結果存到本地緩存中。
下次再調用函數時,倘若還是這些參數,Streamlit就會完全跳過這一塊的函數執行,直接用緩存器里的結果數據。
2. 側邊欄
為了根據個人的傾向需求使界面更加簡潔,用戶可能會想著把插件移動到側邊欄內,比如像Rshiny儀表盤。這非常簡單,只需在插件代碼中添加 st.sidebar即可。
import streamlit as st
import pandas as pd
import numpy as np
import plotly_express as px
df=st.cache(pd.read_csv)("football_data.csv")
clubs=st.sidebar.multiselect('Show Player for clubs?', df['Club'].unique())
nationalities=st.sidebar.multiselect('Show Player from Nationalities?', df['Nationality'].unique())
new_df=df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]
st.write(new_df)
# Create distplot with custom bin_size
fig=px.scatter(new_df, x='Overall',y='Age',color='Name')
# Plot!
st.plotly_chart(fig)
將插件移動到側邊欄內
3. Markdown標記語言可以嗎?
筆者特別喜歡在Markdown里編輯文字,因為發現相比HTML,它少了那些繁瑣的操作,而且更能勝任數據科學的任務。所以讀者也能在Streamlit程序中應用Markdown嗎?
答案是可以。而且是有跡可循的。在筆者看來,最合適的就是調用Magic指令。通過該指令,用戶做標記語言就會像寫評論一樣簡單。用戶也可以使用指令st.markdown。
import streamlit as st
import pandas as pd
import numpy as np
import plotly_express as px'''
# Club and Nationality App
This very simple webapp allows you to select and visualize players from certain clubs and certain nationalities.
'''
df=st.cache(pd.read_csv)("football_data.csv")
clubs=st.sidebar.multiselect('Show Player for clubs?', df['Club'].unique())
nationalities=st.sidebar.multiselect('Show Player from Nationalities?', df['Nationality'].unique())new_df=df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]
st.write(new_df)
# Create distplot with custom bin_size
fig=px.scatter(new_df, x='Overall',y='Age',color='Name')
'''
### Here is a simple chart between player age and overall
'''
st.plotly_chart(fig)
最終的樣品
總結
Streamlit已經介紹了整個創建應用程序的步驟,筆者真沒什么可補充的了。
這篇文章中講述了一個簡單網頁程序的創建,但有太多未知數了。舉個例子,在Streamlit網站碰到GAN時,只會選擇插件和緩存的指導思想。
筆者對程序的默認顏色和風格很喜愛,而且發現這用起來比Dash還順手,筆者創建新程序之前一直用的是Dash。讀者們也可以在自己的Streamlit程序中加上音頻和視頻項。
最重要的是,Streamlit是一款免費的開源軟件,而不是開箱即用的私人網絡應用。
以前筆者遇到任何變動或問題,都需要請教身邊的程序猿朋友;而現在,完全不會這么麻煩了。
筆者的目標是從現在開始,在工作流中多用這個程序。即便是不難的任務,也會考慮用它,筆者覺得你也可以。
雖然筆者還未曾想過在生產環境下它執行的好壞,但對于概念項目和演示的小型驗證來說,它算得上是福音了。筆者的目標是從現在開始,在工作流中多用這個程序。即便是不難的任務,也會考慮用它,筆者覺得你也可以。
完整代碼:https://github.com/MLWhiz/streamlit_football_demo
留言 點贊 關注
我們一起分享AI學習與發展的干貨
如需轉載,請后臺留言,遵守轉載規范
*請認真填寫需求信息,我們會在24小時內與您取得聯系。