首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何多次使用pyodide函数

如何多次使用pyodide函数
EN

Stack Overflow用户
提问于 2021-08-30 22:56:55
回答 1查看 159关注 0票数 3

我想要run funcion对表的每一行执行stemm。我想在加载HTML代码后做这件事,我试试这个

代码语言:javascript
复制
<body>
    <script
      type="text/javascript"
      src="https://cdn.jsdelivr.net/pyodide/dev/full/pyodide.js"
    ></script>
    <script type="text/javascript">
        
      async function main(kw) {
        let pyodide = await loadPyodide({
          indexURL: "https://cdn.jsdelivr.net/pyodide/dev/full/",
        });
        
        pyodide.globals.set("mikw", kw);     
        await pyodide.loadPackage("micropip");
        await pyodide.runPythonAsync(`
            
        import micropip
        import js
        await micropip.install('snowballstemmer')
        import snowballstemmer
        stemmer = snowballstemmer.stemmer('english')
        
        div = js.document.createElement("div")
        div.innerHTML = stemmer.stemWords('Hello this my default text '.split())
        js.document.body.prepend(div)
        varP = js.document.getElementById('origen').textContent
        print(varP)
        salida = stemmer.stemWords(varP.split())
        print(salida)
        divSalida = js.document.createElement("div")
        div.innerHTML =salida
        salida = stemmer.stemWords(mikw.split())
        print(salida)

        `);
        
      } 
        
      main('This are the second text, I put this text on arguments function');
    </script>
    <div id="origen" >This text is inside of HTML element</div>
 </body>

输出为

代码语言:javascript
复制
['This', 'text', 'is', 'insid', 'of', 'HTML', 'element']
['This', 'are', 'the', 'second', 'text,', 'I', 'put', 'this', 'text', 'on', 'argument', 'function']

但是我不能(或者我不知道)在加载html之后使用函数来存储其他kws,例如在加载DOM之后(获取HTML表的值并运行每个kws)。

代码语言:javascript
复制
....      
<div id="origen" onclick="temp()">This text is inside of HTML element</div>
   <script>
     myNewkwStemm=main('other word');
     myNewkwStemm2=main('word2');
   </script>
</body>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 00:45:57

通过在main函数中包含loadPyodide调用,可以多次加载Pyodide,这会给后续的main调用带来错误。将loadPyodide移出main应该可以解决此问题:

代码语言:javascript
复制
<script type="text/javascript">
  let initPyodide = loadPyodide({
    indexURL: "https://cdn.jsdelivr.net/pyodide/dev/full/",
  })
  async function main(kw) {
    let pyodide = await initPyodide
    // ... other code
  }

jsfiddle

此外,您可能不希望依赖pyodide.globals来传递参数,这会导致竞争条件,因为您正在异步运行所有内容。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68991111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档