python又搞事情 想一統天下?

我的小熊不見了發表於2022-05-10

python最近又在搞大事情,就在最近,github上突然多了一個神奇的專案: git地址.
並且最近一直在更新。一看這個名字就讓我們不禁想起JavaScript,再去官網一看pyscript官網, 這傢伙不僅模仿了JavaScript的名字,甚至連身子都想要取而代之!
官方對pyscript的期望是可以在瀏覽器上直接執行python。

<html>|

    ...|

    <py-script> print('Now you can!') </py-script>|

</html>|

懷著一顆好奇心,我們把github上的程式碼克隆下來,發現是一個基於node的前端專案,那第一步先把他跑起來!
進入\pyscript-main\pyscriptjs目錄下,

  1. 首先安裝依賴 cnpm i
  2. 然後先在本地執行 npm run dev
  3. 開啟 http://localhost:8080/

首頁是一個純純的html檔案,在\pyscript-main\pyscriptjs\examples目錄下的index.html,如下圖:

img.png

我們先來看看最簡單的Hello world頁面,如下圖:

img_1.png

頁面確實夠簡單,再看看它的程式碼:

 <body>
    Hello world! <br>
    This is the current date and time, as computed by Python:
    <py-script>
from datetime import datetime
now = datetime.now()
now.strftime("%m/%d/%Y, %H:%M:%S")
    </py-script>
  </body>

想必大家都可以看得懂這段程式碼,精彩的點在於,只要在<py-script>標籤中,就可以直接使用python語法來進行操作了,並且似乎比JavaScript還要直接嗷,甚至還有點資料繫結的意思。

再來看看另一個經典的例子,todo_list,對應todo.html,如下圖:

img_2.png

再看程式碼:

...
 <py-script src="/todo.py">  </py-script>
...
<section>

    <div class="text-center w-full mb-8">
      <h1 class="text-3xl font-bold text-gray-800 uppercase tracking-tight">To Do List</h1>
    </div>
    <div>
      <input id="new-task-content" class="border flex-1 mr-3 border-gray-300 p-2 rounded" type="text">
      <button id="new-task-btn" class="p-2 text-white bg-blue-600 border border-blue-600 rounded" type="submit" pys-onClick="add_task">
        Add task
      </button>
    </div>

    <py-list id="myList"></py-list>
    <div id="list-tasks-container" class="flex flex-col-reverse mt-4">
  </div>

    <template id="task-template">
        <section class="task bg-white my-1">
            <label for="flex items-center p-2 ">
              <input class="mr-2" type="checkbox" class="task-check">
              <p class="m-0 inline"></p>
            </label>
        </section>
      </template>

  </section>

在程式碼最上面竟然引入了一個.py檔案,程式碼中使用pys-onClick繫結了add_task方法,而add_task方法在引入的todo.py中進行了宣告:

def add_task(*ags, **kws):
   ...

也就是說,pyscript真的可以做到和JavaScript在瀏覽器中執行時一樣的呼叫體驗,甚至還可以在瀏覽器中引用python類庫!
在另一個todo_pylist.html頁面中,提供了直接在瀏覽器中執行python命令的方法,

img_3.png

為了顯示自己在處理複雜圖形方面的能力,示例中還提供了和three.js結合而成的webgl示例頁面:

img_4.png
和一些圖表頁面:

img_5.png

可以看到,在功能實現上,pyscript基本可以實現JavaScript能夠實現的功能。

不過從目前的體驗上來看,在瀏覽器上執行python屬實是夠慢的,每次開啟頁面都得等好幾秒,並且第一次開啟頁面的時候竟然還要下載python類庫,github上已經有人提出了這個問題,並且官方回答他們已經努力了,並且還在繼續努力。

有網友說又可以少掌握一門語言多實現一項功能。不過從目前使用者體驗這個角度來看,pyscript想要取代JavaScript在瀏覽器上的地位可能還有一段路要走,但是卻給我們提供了玩python的另一條新道路。pyscript還可以朝著哪些方面發展,歡迎大家提出自己的看法。

相關文章