整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          PyScript:讓 Python 腳本在 Web 中跑起來

          是下一個大事件嗎?如果繼續發展下去,有可能。


          在 2022 年 PyCon 美國大會期間,作為主題演講嘉賓之一的 Peter Wang 公布了 PyScript,一種在 HTML 中直接編寫 Python 腳本的方法。或許你不知道 Peter,但你可能聽說過 Anaconda,這是一種流行的開源的 Python 和 R 語言的發行版本,特別關注數據科學。Peter 正是 Anaconda 的 CEO 和聯合創始人。


          換言之,PyScript 是由一家著名的科技公司開發的,這可能會保證它在不久的將來成為可行的方案。它在 Python 和 Web 開發者中受到了極大的關注,GitHub 上已有超過 10k 顆 Stars。然而,它是否能成為一個成功的、有競爭力的產品,取決于長期的時間和開發投入。目前,它還有一些已知的缺陷(將在最后討論)。


          閑話少說,讓我們快速了解一下這個令人振奮的產品吧!

          py-script 標簽

          我們知道,HTML 文件是大多數網站最常見的元素。在創建網站時,我們的工作就是直接或間接地通過一些框架來編制 HTML 文件。在典型的 HTML 文件中,你會看到各種類型的標簽。例如,<head>定義了 HTML 頁面的元數據和關鍵信息,<title>是整個文檔的標題,而<h1>、<h2>等定義了不同級別的內容標題。


          如前所述,PyScript 允許你在 HTML 中編寫 Python 腳本,它使用一個特殊的標簽py-script。在這個標簽中,你可以嵌入 Python 腳本。要了解它是如何工作的,可以創建一個 HTML 文件,其中包含以下代碼,并使用 Chrome 瀏覽器打開該文件。在 Chrome 瀏覽器中,你應該能夠看到類似下面這樣的內容:



          作者截圖


          在上面的代碼片段中,你可能已經注意到以下三個關鍵點:

          • link標簽定義了一個外部樣式表。在這個例子中,我們使用了 PyScript 提供的css文件。
          • 我們使用script標簽來嵌入一個由src定義、由 PyScript 托管的外部腳本。我們使用了defer,這樣腳本會在下載和頁面解析完成后執行——本質上是一種延遲執行,而不是實時執行。
          • 最有趣的部分是py-script標簽。如你所見,print("Hello, World!")是 Python 代碼。當執行 HTML 文件時,就可以看到代碼求值結果。


          這很酷,不是嗎?如果你不熟悉 Web 開發,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代碼。讓我們再看一個例子。



          另一個 PyScript 示例(圖片由作者提供)


          在這里,我們寫了一些需要計算的代碼,可以看到,腳本得到了正確的執行。

          py-env 標簽

          在編寫更復雜的代碼時,就需要使用第三方庫。在這種情況下,我們可以利用py-env標簽。你可能已經猜到的,env 是 environment 的縮寫。py-env標簽中列出了運行代碼所需的 Python 包。


          你可能知道,許多數據科學家都使用 pandas 進行數據處理工作。讓我們看看下面的例子。



          使用包的 PyScript(圖片由作者提供)


          如你所見,我們在py-env標簽中指定了依賴項(即 Pandas),該標簽包含在head標簽中。如果頁面需要多個依賴項,可以在這里把它們全部列出:


          <py-env>
            - pandas
            - matplotlib
            - numpy
          </py-env>

          復制代碼

          如你所見,在py-script標簽中,我們確實可以使用 Pandas 庫來創建一個DataFrame對象。然而,當我們把打印出來時就會發現,它是一個單行,而不是一個結構化的數據表。沒有一個適當的結構,我們就無法理解這些數據。幸運的是,我們可以使用write函數(下文會討論)。

          將內容寫入指定標簽

          除了 Python 中的標準打印函數print,作為腳本的一部分,PyScript 有自己的write函數,可以將數據發送到頁面上指定的 Web 元素中。請看下面的例子:



          PyScript 寫函數 write(圖片由作者提供)


          與之前的例子相比,上述代碼片段有兩個重大變化:

          • 我們現在定義了一個 id 為"DataFrame"div,這樣稍后就可以引用。
          • py-script標簽中,我們創建一個與之前相同的DataFrame對象。但現在,我們不是調用print,而是調用pyscript.write函數,請求 PyScript 處理并在"DataFrame"中顯示DataFrame對象。從輸出可以看到,我們現在有一個結構化的表格了。


          write函數不僅能夠打印表格,還能夠打印數字。下面的例子向你展示了我們如何使用matplotlib(一個流行的 Python 包,用于數據可視化)來顯示由 Python 創建的圖。



          PyScript 打印圖(圖片由作者提供)


          如你所見,write 函數以期望的方式顯示了圖。

          py-repl 標簽


          Python 學習的最好方法之一是使用 REPL:讀取(Read)、求值(Evaluate)、打印(Print)和循環(Loop)。也就是說,使用一個交互式的 Python 控制臺,輸入一些代碼,Python 對其進行求值并打印適當的輸出,然后重復這個過程。Web 頁面也可以提供這樣的 REPL 環境,比如 Jupyter Notebook。


          PyScript 可以使用py-repl標簽提供與此類似的東西。在這個元素中,你可以讓用戶自己編寫代碼,也可以以編程方式輸入代碼。請看下面的例子:



          PyScript REPL(圖片由作者提供)


          如你所見,上圖中有一個單元格,其中包括在py-repl標簽中指定的代碼。值得注意的是,單元格中的代碼可以引用我們之前在py-script標簽中定義的變量。一切看起來都很協調。

          感想


          本文介紹的內容是現階段 PyScript 所能提供的主要亮點。它似乎是一個很有前途的產品,因為它提供了一個靈活的框架,讓 Python 程序員可以在沒有太多 Web 開發知識的情況下創建 Web 應用。然而,也有其他類似的成功的產品,因此,競爭會很激烈。


          例如,如果我需要為自己的數據科學項目創建一個 Web 應用,我就會直接使用 Streamlit。它的功能已經相對成熟。請注意,雖然都與 Web 開發有關,但 PyScript 和 Streamlit 屬于不同的產品系。PyScript 應該更通用,因為它的目標是讓你可以在任何網頁上嵌入任何 Python 代碼,Streamlit 做不到這一點。


          在 PyScript 為更多的人所接受之前,它有幾個問題必須解決。例如,Web 頁面的加載速度非常慢。如果你嘗試跟隨本教程運行代碼,可能就會注意到,在 Web 頁面的顯示會有一個明顯的滯后。


          盡管如此,我還是覺得這個產品會繼續發展,我的信心主要來自于它的開發者——給我們帶來極好的 Anaconda 工具的 Anaconda 團隊。


          本文最初發布于 Better Programming。


          查看英文原文:Running Python Scripts on the Web Using PyScript

          了解更多軟件開發與相關領域知識,點擊訪問 InfoQ 官網:https://www.infoq.cn/,獲取更多精彩內容!

          、什么是 JavaScript 語言?

          JavaScript 是一種輕量級的腳本語言。所謂“腳本語言”(script language),指的是它不具備開發操作系統的能力,而是只用來編寫控制其他大型應用程序(比如瀏覽器)的“腳本”。

          JavaScript 也是一種嵌入式(embedded)語言。它本身提供的核心語法不算很多,只能用來做一些數學和邏輯運算。JavaScript 本身不提供任何與 I/O(輸入/輸出)相關的 API,都要靠宿主環境(host)提供,所以 JavaScript 只合適嵌入更大型的應用程序環境,去調用宿主環境提供的底層 API。

          目前,已經嵌入 JavaScript 的宿主環境有多種,最常見的環境就是瀏覽器,另外還有服務器環境,也就是 Node 項目。

          從語法角度看,JavaScript 語言是一種“對象模型”語言。各種宿主環境通過這個模型,描述自己的功能和操作接口,從而通過 JavaScript 控制這些功能。但是,JavaScript 并不是純粹的“面向對象語言”,還支持其他編程范式(比如函數式編程)。這導致幾乎任何一個問題,JavaScript 都有多種解決方法。閱讀本書的過程中,你會詫異于 JavaScript 語法的靈活性。

          JavaScript 的核心語法部分相當精簡,只包括兩個部分:基本的語法構造(比如操作符、控制結構、語句)和標準庫(就是一系列具有各種功能的對象比如Array、Date、Math等)。除此之外,各種宿主環境提供額外的 API(即只能在該環境使用的接口),以便 JavaScript 調用。以瀏覽器為例,它提供的額外 API 可以分成三大類。

          • 瀏覽器控制類:操作瀏覽器
          • DOM 類:操作網頁的各種元素
          • Web 類:實現互聯網的各種功能

          如果宿主環境是服務器,則會提供各種操作系統的 API,比如文件操作 API、網絡通信 API等等。這些你都可以在 Node 環境中找到。

          本書主要介紹 JavaScript 核心語法和瀏覽器網頁開發的基本知識,不涉及 Node。全書可以分成以下四大部分。

          • 基本語法
          • 標準庫
          • 瀏覽器 API
          • DOM

          JavaScript 語言有多個版本。本書的內容主要基于 ECMAScript 5.1 版本,這是學習 JavaScript 語法的基礎。ES6 和更新的語法請參考我寫的《ECMAScript 6入門》。(以下是圖書購買地址)

          《ECMAScript 6 入門》是一本開源的 JavaScript 語言教程,全面介紹 ECMAScript 6 新引入的語法特性。全書已由電子工業出版社出版,2017年9月推出了第三版,書名為《ES6 標準入門》。紙版是基于網站內容排版印刷的。如果您認可這本書,建議購買紙版。這樣可以使出版社不因出版開源書籍而虧錢,進而鼓勵更多的作者開源自己的書籍。--------阮一峰

          2、為什么學習 JavaScript?

          JavaScript 語言有一些顯著特點,使得它非常值得學習。它既適合作為學習編程的入門語言,也適合當作日常開發的工作語言。它是目前最有希望、前途最光明的計算機語言之一。

          2.1、操控瀏覽器的能力

          JavaScript 的發明目的,就是作為瀏覽器的內置腳本語言,為網頁開發者提供操控瀏覽器的能力。它是目前唯一一種通用的瀏覽器腳本語言,所有瀏覽器都支持。它可以讓網頁呈現各種特殊效果,為用戶提供良好的互動體驗。

          目前,全世界幾乎所有網頁都使用 JavaScript。如果不用,網站的易用性和使用效率將大打折扣,無法成為操作便利、對用戶友好的網站。

          對于一個互聯網開發者來說,如果你想提供漂亮的網頁、令用戶滿意的上網體驗、各種基于瀏覽器的便捷功能、前后端之間緊密高效的聯系,JavaScript 是必不可少的工具。

          2.2、廣泛的使用領域

          近年來,JavaScript 的使用范圍,慢慢超越了瀏覽器,正在向通用的系統語言發展。

          (1)瀏覽器的平臺化

          隨著 HTML5 的出現,瀏覽器本身的功能越來越強,不再僅僅能瀏覽網頁,而是越來越像一個平臺,JavaScript 因此得以調用許多系統功能,比如操作本地文件、操作圖片、調用攝像頭和麥克風等等。這使得 JavaScript 可以完成許多以前無法想象的事情。

          (2)Node

          Node 項目使得 JavaScript 可以用于開發服務器端的大型項目,網站的前后端都用 JavaScript 開發已經成為了現實。有些嵌入式平臺(Raspberry Pi)能夠安裝 Node,于是 JavaScript 就能為這些平臺開發應用程序。

          (3)數據庫操作

          JavaScript 甚至也可以用來操作數據庫。NoSQL 數據庫這個概念,本身就是在 JSON(JavaScript Object Notation)格式的基礎上誕生的,大部分 NoSQL 數據庫允許 JavaScript 直接操作?;?SQL 語言的開源數據庫 PostgreSQL 支持 JavaScript 作為操作語言,可以部分取代 SQL 查詢語言。

          (4)移動平臺開發

          JavaScript 也正在成為手機應用的開發語言。一般來說,安卓平臺使用 Java 語言開發,iOS 平臺使用 Objective-C 或 Swift 語言開發。許多人正在努力,讓 JavaScript 成為各個平臺的通用開發語言。

          PhoneGap 項目就是將 JavaScript 和 HTML5 打包在一個容器之中,使得它能同時在 iOS 和安卓上運行。Facebook 公司的 React Native 項目則是將 JavaScript 寫的組件,編譯成原生組件,從而使它們具備優秀的性能。

          Mozilla 基金會的手機操作系統 Firefox OS,更是直接將 JavaScript 作為操作系統的平臺語言,但是很可惜這個項目沒有成功。

          (5)內嵌腳本語言

          越來越多的應用程序,將 JavaScript 作為內嵌的腳本語言,比如 Adobe 公司的著名 PDF 閱讀器 Acrobat、Linux 桌面環境 GNOME 3。

          (6)跨平臺的桌面應用程序

          Chromium OS、Windows 8 等操作系統直接支持 JavaScript 編寫應用程序。Mozilla 的 Open Web Apps 項目、Google 的 Chrome App 項目、Github 的 Electron 項目、以及 TideSDK 項目,都可以用來編寫運行于 Windows、Mac OS 和 Android 等多個桌面平臺的程序,不依賴瀏覽器。

          (7)小結

          可以預期,JavaScript 最終將能讓你只用一種語言,就開發出適應不同平臺(包括桌面端、服務器端、手機端)的程序。早在2013年9月的統計之中,JavaScript 就是當年 Github 上使用量排名第一的語言。

          著名程序員 Jeff Atwood 甚至提出了一條 “Atwood 定律”:

          “所有可以用 JavaScript 編寫的程序,最終都會出現 JavaScript 的版本?!?Any application that can be written in JavaScript will eventually be written in JavaScript.)

          2.3、易學性

          相比學習其他語言,學習 JavaScript 有一些有利條件。

          (1)學習環境無處不在

          只要有瀏覽器,就能運行 JavaScript 程序;只要有文本編輯器,就能編寫 JavaScript 程序。這意味著,幾乎所有電腦都原生提供 JavaScript 學習環境,不用另行安裝復雜的 IDE(集成開發環境)和編譯器。

          (2)簡單性

          相比其他腳本語言(比如 Python 或 Ruby),JavaScript 的語法相對簡單一些,本身的語法特性并不是特別多。而且,那些語法中的復雜部分,也不是必需要學會。你完全可以只用簡單命令,完成大部分的操作。

          (3)與主流語言的相似性

          JavaScript 的語法很類似 C/C++ 和 Java,如果學過這些語言(事實上大多數學校都教),JavaScript 的入門會非常容易。

          必須說明的是,雖然核心語法不難,但是 JavaScript 的復雜性體現在另外兩個方面。

          首先,它涉及大量的外部 API。JavaScript 要發揮作用,必須與其他組件配合,這些外部組件五花八門,數量極其龐大,幾乎涉及網絡應用的各個方面,掌握它們絕非易事。

          其次,JavaScript 語言有一些設計缺陷。某些地方相當不合理,另一些地方則會出現怪異的運行結果。學習 JavaScript,很大一部分時間是用來搞清楚哪些地方有陷阱。Douglas Crockford 寫過一本有名的書,名字就叫《JavaScript: The Good Parts》,言下之意就是這門語言不好的地方很多,必須寫一本書才能講清楚。另外一些程序員則感到,為了更合理地編寫 JavaScript 程序,就不能用 JavaScript 來寫,而必須發明新的語言,比如 CoffeeScript、TypeScript、Dart 這些新語言的發明目的,多多少少都有這個因素。

          盡管如此,目前看來,JavaScript 的地位還是無法動搖。加之,語言標準的快速進化,使得 JavaScript 功能日益增強,而語法缺陷和怪異之處得到了彌補。所以,JavaScript 還是值得學習,況且它的入門真的不難。

          2.4、強大的性能

          JavaScript 的性能優勢體現在以下方面。

          (1)靈活的語法,表達力強。

          JavaScript 既支持類似 C 語言清晰的過程式編程,也支持靈活的函數式編程,可以用來寫并發處理(concurrent)。這些語法特性已經被證明非常強大,可以用于許多場合,尤其適用異步編程。

          JavaScript 的所有值都是對象,這為程序員提供了靈活性和便利性。因為你可以很方便地、按照需要隨時創造數據結構,不用進行麻煩的預定義。

          JavaScript 的標準還在快速進化中,并不斷合理化,添加更適用的語法特性。

          (2)支持編譯運行。

          JavaScript 語言本身,雖然是一種解釋型語言,但是在現代瀏覽器中,JavaScript 都是編譯后運行。程序會被高度優化,運行效率接近二進制程序。而且,JavaScript 引擎正在快速發展,性能將越來越好。

          此外,還有一種 WebAssembly 格式,它是 JavaScript 引擎的中間碼格式,全部都是二進制代碼。由于跳過了編譯步驟,可以達到接近原生二進制代碼的運行速度。各種語言(主要是 C 和 C++)通過編譯成 WebAssembly,就可以在瀏覽器里面運行。

          (3)事件驅動和非阻塞式設計。

          JavaScript 程序可以采用事件驅動(event-driven)和非阻塞式(non-blocking)設計,在服務器端適合高并發環境,普通的硬件就可以承受很大的訪問量。

          2.5、開放性

          JavaScript 是一種開放的語言。它的標準 ECMA-262 是 ISO 國際標準,寫得非常詳盡明確;該標準的主要實現(比如 V8 和 SpiderMonkey 引擎)都是開放的,而且質量很高。這保證了這門語言不屬于任何公司或個人,不存在版權和專利的問題。

          語言標準由 TC39 委員會負責制定,該委員會的運作是透明的,所有討論都是開放的,會議記錄都會對外公布。

          不同公司的 JavaScript 運行環境,兼容性很好,程序不做調整或只做很小的調整,就能在所有瀏覽器上運行。

          2.6、社區支持和就業機會

          全世界程序員都在使用 JavaScript,它有著極大的社區、廣泛的文獻和圖書、豐富的代碼資源。絕大部分你需要用到的功能,都有多個開源函數庫可供選用。

          作為項目負責人,你不難招聘到數量眾多的 JavaScript 程序員;作為開發者,你也不難找到一份 JavaScript 的工作。

          3、實驗環境

          本教程包含大量的示例代碼,只要電腦安裝了瀏覽器,就可以用來實驗了。讀者可以一邊讀一邊運行示例,加深理解。

          推薦安裝 Chrome 瀏覽器,它的“開發者工具”(Developer Tools)里面的“控制臺”(console),就是運行 JavaScript 代碼的理想環境。

          進入 Chrome 瀏覽器的“控制臺”,有兩種方法。

          • 直接進入:按下Option + Command + J(Mac)或者Ctrl + Shift + J(Windows / Linux)
          • 開發者工具進入:開發者工具的快捷鍵是 F12,或者Option + Command + I(Mac)以及Ctrl + Shift + I(Windows / Linux),然后選擇 Console 面板

          進入控制臺以后,就可以在提示符后輸入代碼,然后按Enter鍵,代碼就會執行。如果按Shift + Enter鍵,就是代碼換行,不會觸發執行。建議閱讀本教程時,將代碼復制到控制臺進行實驗。

          作為嘗試,你可以將下面的程序復制到“控制臺”,按下回車后,就可以看到運行結果。

          function greetMe(yourName) { console.log('Hello ' + yourName);
          }
          greetMe('World')// Hello World
          

          推薦閱讀:

          詳解 js 閉包(圖文版)

          「JavaScript 教程」數據類型-數組

          「JavaScript 教程」數據類型-函數

          「JavaScript 教程」數據類型-對象

          下是一套詳細的解決方案來幫助你解決"如何寫腳本"的問題。

          ·1.確定腳本的目標和需求:在開始編寫腳本之前需要明確目標和需求,這可能涉及到腳本的目的要完成的任務,需要的數據輸入和預期的輸出等。

          ·2.選擇合適的腳本語言:選擇一種適合你需求的語言來編寫腳本,常見的腳本語言包括Python、JavaScript、Bash等,選擇一種熟悉或者覺得適合解決問題的語言。

          ·3.了解腳本的基礎知識:在開始編寫腳本之前需要了解一些基礎知識,比如變量、函數、語句、循環等,這些是大多數腳本語言的基礎構造。

          ·4.編寫腳本:根據需求和選擇的腳本語言開始編寫腳本,在編寫過程中要確保注釋清晰,以便于理解代碼的工作原理,也便于其他人閱讀和修改。

          ·5.測試和調試腳本:完成腳本編寫后進行測試和調試,這可能涉及到運行腳本、檢查輸出或者添加更多的錯誤處理代碼來確保腳本在遇到問題時能夠正確處理。

          ·6.優化和維護腳本:根據需要優化和維護腳本,這可能包括優化代碼以提高性能添加新的功能,或者修改現有的功能以適應新的需求。

          ·7.學習和實踐:持續學習和實踐是成為一名優秀的腳本編寫員的關鍵,通過閱讀書籍參與在線課程、參加編程社區等方式不斷提高編程技能。

          以上就是一套解決"如何寫腳本"問題的解決方案,希望對你有所幫助!


          主站蜘蛛池模板: 99久久综合狠狠综合久久一区| 波多野结衣在线观看一区二区三区 | 色一情一乱一伦一区二区三欧美| 国产婷婷色一区二区三区| 国产精品无码不卡一区二区三区| 麻豆国产在线不卡一区二区| 精品少妇人妻AV一区二区| 精品国产一区二区三区香蕉事 | 亚洲av无码天堂一区二区三区| 在线电影一区二区| 国产免费一区二区三区免费视频| 精品国产不卡一区二区三区 | 无码日韩人妻AV一区免费l| 国产a久久精品一区二区三区| 狠狠做深爱婷婷综合一区| www一区二区三区| 在线日产精品一区| 中文字幕日韩一区二区三区不| 无码aⅴ精品一区二区三区浪潮 | 亚洲爆乳精品无码一区二区三区 | 精品人妻一区二区三区毛片| 无码国产精品一区二区免费16| 色窝窝免费一区二区三区 | 国产午夜精品一区二区三区小说 | 亚洲熟妇无码一区二区三区导航| 国产精品美女一区二区| 亚洲男女一区二区三区| 亚洲第一区精品日韩在线播放| 久久久久成人精品一区二区| 久久精品无码一区二区三区日韩| 日韩中文字幕一区| 精品一区二区三区在线成人| 一区二区三区亚洲视频| 女同一区二区在线观看| 亚洲一区二区三区久久| 久久精品国产一区二区三区肥胖| 天码av无码一区二区三区四区 | 少妇激情一区二区三区视频| 人妻无码一区二区三区| 日本在线视频一区| 日本视频一区二区三区|