嘉興做網(wǎng)站的銷售培訓(xùn)課程一般有哪些
由Anaconda創(chuàng)建的PyScript是一項(xiàng)實(shí)驗(yàn)性的但很有前途的新技術(shù),它使python運(yùn)轉(zhuǎn)時(shí)在支撐WebAssembly的瀏覽器中作為一種腳本言語(yǔ)運(yùn)用。
每個(gè)現(xiàn)代常用的瀏覽器現(xiàn)在都支撐WebAssembly,這是許多言語(yǔ)(如C、C++和Rust)能夠編譯的高速運(yùn)轉(zhuǎn)時(shí)規(guī)范。Python的參考實(shí)現(xiàn)是用C言語(yǔ)編寫(xiě)的,一個(gè)早期項(xiàng)目Pyodide供給了Python運(yùn)轉(zhuǎn)時(shí)的WebAssembly移植。
不過(guò),PyScript的方針是供給一個(gè)完好的瀏覽器環(huán)境,將Python作為一種網(wǎng)絡(luò)腳本言語(yǔ)運(yùn)轉(zhuǎn)。它建立在Pyodide之上,但增加或加強(qiáng)了一些功用,如從規(guī)范庫(kù)中導(dǎo)入模塊、運(yùn)用第三方導(dǎo)入、裝備與文檔目標(biāo)模型(DOM)的雙向交互,以及做許多其他在Python和JavaScript國(guó)際中有用的事情。
現(xiàn)在,PyScript仍然是一個(gè)原型和實(shí)驗(yàn)性項(xiàng)目。Anaconda 并不推薦在生產(chǎn)中運(yùn)用它。但獵奇的用戶能夠在PyScript網(wǎng)站上測(cè)驗(yàn)一些比方,并運(yùn)用可用的組件在瀏覽器中構(gòu)建實(shí)驗(yàn)性的Python+JavaScript應(yīng)用程序。
1、HelloWorld
PyScript的中心是一個(gè)單一的JavaScript include,你能夠?qū)⑵湓黾拥骄W(wǎng)頁(yè)中。
下面是一個(gè)PyScript版本的 “hello, world “:
<!DOCTYPE html>
<html><head><link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" /><script defer src="https://pyscript.net/unstable/pyscript.js"></script></head><body>
<py-script output="out">
print("Hello world")
</py-script>
<div id="out"></div></body>
</html>
head
?文檔中的script
?標(biāo)簽加載了PyScript的中心功能。pyscript.css
?樣式表是可選的,但很有用。
Python代碼被包含在自定義的py-script
?標(biāo)簽中。請(qǐng)留意,代碼應(yīng)該按照Python的縮進(jìn)常規(guī)進(jìn)行格式化,否則將無(wú)法正常運(yùn)轉(zhuǎn)。假如你運(yùn)用的編輯器能主動(dòng)重新格式化HTML,請(qǐng)留意這一點(diǎn);它可能會(huì)弄亂py-script
?塊的內(nèi)容,使其無(wú)法運(yùn)轉(zhuǎn)。
一旦PyScript組件加載完畢,任何Python代碼都會(huì)被評(píng)估。假如標(biāo)簽中的腳本寫(xiě)到stdout
?(如print
) 語(yǔ)句中,你能夠通過(guò)供給一個(gè)output
?屬性來(lái)指示在頁(yè)面的什么地方顯示輸出。
在這個(gè)示例中,腳本的stdout
?被引導(dǎo)到ID為"out"
?的div
?。
假如你把它保存到一個(gè)文件中,并在網(wǎng)絡(luò)瀏覽器中打開(kāi)它,你會(huì)首先看到一個(gè) “加載 “指示器和一個(gè)暫停,由于瀏覽器獲得了PyScript的運(yùn)轉(zhuǎn)時(shí)刻并將其設(shè)置好。該運(yùn)轉(zhuǎn)時(shí)在未來(lái)的加載中應(yīng)堅(jiān)持緩存,但仍需要一些時(shí)刻來(lái)激活。之后,Hello world
?應(yīng)該出現(xiàn)在頁(yè)面上。
2、規(guī)范庫(kù)導(dǎo)入
Python 的規(guī)范庫(kù)在 PyScript 中可用,就像你在常規(guī) Python 中運(yùn)用它一樣:只需import
?導(dǎo)入就可以正常調(diào)用。
下面是一個(gè)調(diào)用datetime庫(kù)顯示時(shí)間的示例:
import datetime
print ("Current date and time:", datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
3、調(diào)用來(lái)自PyPI的庫(kù)
除了標(biāo)準(zhǔn)庫(kù),python還有大量的第三方庫(kù),假如咱們想從PyPI中安裝一個(gè)包并運(yùn)用它呢?
PyScript 有另一個(gè)標(biāo)簽,py-env
?,它指定了需要安裝的第三方軟件包。
下面的示例是調(diào)用一個(gè)第三方庫(kù)humanize庫(kù),用這個(gè)庫(kù)來(lái)替換原始腳本中的py-script
?塊:
<py-env>
- humanize
</py-env>
<py-script output="out">
from datetime import datetime
import humanize
now_int = int(datetime.timestamp(datetime.now()))
now_fmt = humanize.intcomma(now_int)
print("It has been", now_fmt, "seconds since the epoch.")
</py-script>
py-env
?塊中列出要增加的軟件包,就像在 Python 項(xiàng)目的requirements.txt
?文件中列出它們一樣。然后咱們能夠像對(duì)待其他 Python 軟件包一樣導(dǎo)入和運(yùn)用它們。
留意,并不是一切來(lái)自PyPI的包都能順利安裝和運(yùn)行。例如,requests
?需要拜訪尚不支撐的網(wǎng)絡(luò)組件。(這個(gè)問(wèn)題的一個(gè)可能的解決方法是運(yùn)用pyodide.http.pyfetch
?,它被原生支撐)??墒羌?Python 包,如humanize
?,應(yīng)該運(yùn)轉(zhuǎn)正常。Anaconda 供給的比方中運(yùn)用的包,如numpy
,pandas
,bokeh
, 或matplotlib
?,也能夠正常運(yùn)行。
4、本地導(dǎo)入
對(duì)于另一種常見(jiàn)的情況,假定你想從與你的網(wǎng)頁(yè)在同一目錄樹(shù)下的其它 Python 腳本中導(dǎo)入。運(yùn)用導(dǎo)入能夠更容易地將更多的 Python 邏輯從網(wǎng)頁(yè)自身移出,在那里它和你的模板文件混在一起,可能會(huì)變得難以處理。
一般來(lái)說(shuō),Python 。PyScript 不能以這種方法作業(yè),所以你需要指定哪些文件能夠作為可導(dǎo)入模塊。
比方說(shuō),你有一個(gè)名為index.html
?的網(wǎng)頁(yè),在你的 web 服務(wù)器的某個(gè)目錄下,你想在它旁邊放置一個(gè)名為main.py
?的 Python 文件。這樣,你的頁(yè)內(nèi)腳本就能夠import main
?,而你能夠把大部分的 Python 邏輯限制在實(shí)踐的.py
?文件中。
在你的py-env
?塊中指定你想導(dǎo)入的 Python 文件。
- paths:`` - ./main.py
這將允許main.py
?,在與網(wǎng)頁(yè)自身相同的 web 服務(wù)器目錄下,能夠與import main
?一同導(dǎo)入。
要記住一件重要的事情。你不能對(duì)你在瀏覽器中本地啟動(dòng)的網(wǎng)頁(yè)進(jìn)行這樣的導(dǎo)入。這是由于WebAssembly運(yùn)轉(zhuǎn)時(shí)和瀏覽器自身對(duì)文件體系拜訪的限制造成的。相反,你需要在網(wǎng)絡(luò)服務(wù)器上托管這些網(wǎng)頁(yè),以供給網(wǎng)頁(yè)和.py
?文件。
5、REPL 標(biāo)簽
Python用戶應(yīng)該了解Jupyter Notebook,它是Python的瀏覽器內(nèi)實(shí)時(shí)編碼環(huán)境,一般用于數(shù)學(xué)和統(tǒng)計(jì)學(xué)。PyScript為這樣的環(huán)境供給了一個(gè)原始的構(gòu)建模塊,即py-repl
?標(biāo)簽。
py-repl
?在網(wǎng)頁(yè)上生成一個(gè)輸入字段,其功用就像一個(gè)十分基本的Jupyter筆記本環(huán)境。
下面的示例相當(dāng)于一個(gè)自己手搓的jupyter:
<!DOCTYPE html>
<html lang="en"><head><link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" /><script defer src="https://pyscript.net/alpha/pyscript.js"></script></head><body><h1><b>pyscript REPL</b></h1>Tip: 按下 Shift-ENTER 運(yùn)行一個(gè)單元<br><div><py-repl id="my-repl" auto-generate="true"> </py-repl></div></body>
</html>
效果如下:PyScript的相似Jupyter的REPL組件能夠讓你在頁(yè)面中交互式地運(yùn)轉(zhuǎn)Python,盡管它還不是很靈活或可裝備。
6、與 JavaScript 事件監(jiān)聽(tīng)器互動(dòng)
由于 PyScript 是根據(jù)pyodide
?的,所以它運(yùn)用pyodide
?的機(jī)制來(lái)與 DOM 交互。例如,假如咱們想獲得一個(gè)網(wǎng)頁(yè)上的輸入框的值并在咱們的Python代碼中運(yùn)用它,咱們會(huì)這樣做。
<!DOCTYPE html>
<html><head><link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" /><script defer src="https://pyscript.net/unstable/pyscript.js"></script></head><body><input id="txt">
<py-script>
from js import document, console
from pyodide import create_proxy
def _eventlog(e):console.log(f"Input value: {e.target.value}")
eventlog = create_proxy(_eventlog)
document.getElementById("txt").addEventListener("input", eventlog)
</py-script></body>
</html>
js
?庫(kù)為許多常見(jiàn)的 JavaScript 實(shí)體供給了一個(gè) Python 接口,比方document
?和console
?目標(biāo)。它們?cè)赑yScript中的行為與在JavaScript中的行為簡(jiǎn)直完全相同。pyodide
?中的create_proxy
?函數(shù)能夠讓咱們?nèi)∫粋€(gè) Python 函數(shù)目標(biāo)并為它生成一個(gè) JavaScript 接口,因而它能夠被用作input
?框的事情監(jiān)聽(tīng)器。input
?框中的任何按鍵都會(huì)被記錄到控制臺(tái),但它們也能夠在Python端被處理。