当前位置: 首页 > news >正文

肇庆住房建设部网站上海雍熙

肇庆住房建设部网站,上海雍熙,要看网的域名是多少,磁县网站制作公司Transcrypt是一个很有意思的工具#xff1a; 它让你告别手写繁复的JavaScript代码#xff0c;使用相对简明清晰的Python代替这一工作。 之后使用这个工具#xff0c;可以把Python编写的代码转换成JavaScript。 1. 为什么不直接写JavsScript? JavaScript本身不算是很难的编程…Transcrypt是一个很有意思的工具 它让你告别手写繁复的JavaScript代码使用相对简明清晰的Python代替这一工作。 之后使用这个工具可以把Python编写的代码转换成JavaScript。 1. 为什么不直接写JavsScript? JavaScript本身不算是很难的编程语言但还是有很多不便之处。这里只能举几个例子 1.1 js的模块化问题。 想要实现一个很复杂的js程序一般要考虑将不同的功能拆分成模块然后各自完成各自的任务。 然而js本身没有什么方式可以做到这一点 要么在浏览器或者NodeJS中使用require这样的方案”AMD”—-模块异步加载浏览器还需要额外加载require.js 要么使用各种打包工具CommonJS—-规定了通用的模块定义方式根据模块各部分代码相互关系将所有的代码打包进一个巨大的文件。 Transcrypt支持Python的模块机制import语法效果上最后还是生成一个打包的代码文件但使用起来比CommonJS要清晰一些。 1.2 缺乏对class这样的关键字的支持 JavaScript虽然算是一种基于对象的语言—-JavaScript中包括数字、字符串等都是对象 但又没有办法通过class来自己声明一个对象。 这就导致不同的程序员会采用不同的方案来构建对象。比如有使用Object的 var owl {}; owl.color white; owl.category Bubo bubo; owl.eat function(){ ... }; 或者改写一个函数增加各种attributes: function Owl(){ var self this; this.color white; this.category Bubo bubo; this.eat function(){ ... }; return this; } var owl new Owl(); 1.3 缺乏语法糖代码复杂 Python简洁的语法很多得益于丰富的语法糖 很简洁的几句话就可以实现复杂的功能而JavaScript则可能要从头开始写一系列代码。 举几个例子 a) 使用给定的值生成一个字符串 output My name is {name}, Im {age} years old. My favourite fruit is {favourite}..format({ favourite: banana, name: Alice, age: 18, }) console.log(output) 这也是一个简单的例子如何套用模板将数据转换成供显示的文本。js的解决方案就复杂许多 首先js是不支持带有换行的字符串变量的。所以我们不能用Python...这种语法指定一个带有换行的字符串。 其次也不能在js的字符串中定义占位符然后用数据填充所以要自行断开字符串将数据与字符串合并。 看起来结果就是: var data { favourite: banana, name: Alice, age: 18, }; var output My name is data.name , Im data.age years old.\n; output My favourite fruit is data.favourite .; console.log(output); 即使看上去代码量差不多这样做还是有一个缺点 如果需要修改模板使用Python只要将带有占位符的字符串换掉就可以了比如字符串在单独的模板文件中予以定义 但使用js就需要具体修改带有逻辑运算符的代码。这样就很不直观容易出错。 b) 根据已有数据生成一个新的数组 假设我们有一个数组[-2, -1, 0, 1, 2, 3, 4]想列出这个数组中大于0的各个数字的平方。 使用js的思路是新建一个数组然后遍历原数组检查各项是否大于0, 如果是将结果记录到新的数组 var original [-2, -1, 0, 1, 2, 3, 4]; var result []; for(var i0; i if(original[i] 0){ result.push(Math.pow(original[i], 2)); } } Python则简单很多。Python支持在构建list的时候指定条件并使用表达式指定要放入list的值 original [-2, -1, 0, 1, 2, 3, 4] result [each ** 2 for each in original if each 0] 1.4 复杂的异步编程 JavaScript的另一个令人诟病的问题是在调用一系列异步调用时难以组织代码。 实际应用中无论NodeJS还是浏览器都要遇到各种异步调用的代码。 假设我们有3个函数 readFile用于读取一个文件; encrypt用于加密数据; upload用于将数据上传到服务器。 这三个函数都是异步调用的。 传统的方式一般是在实际完成功能需要的参数之外这些函数还接受一个callback回调函数作为输入。 这样调用上述函数之后他们会立刻返回并不耽误时间。然后当函数对应的后台任务完成时再呼叫callback传入结果。 比如这样看可以假设readFile的用法是readFile(filename, callback)。 这个函数接受一个filename作为要读取的文件名然后在读取完毕时呼叫callback函数传入读取结果。 实际调用时要写成 readFile(/path/to/somefile, function(err, data){ if(err){ ... return; // 如果读取文件出错 } // 否则读取文件成功继续做下一步的事情 }); 假如我们想在读取文件后将文件内容加密就要在上述代码的读取成功处 加上对encryptencrypt(data, callback)函数的调用。于是代码就成了这个样子 readFile(/path/to/somefile, function(err, data){ if(err){ ... return; // 如果读取文件出错 } // 读取文件成功加密data encrypt(data, function(err, ciphertext){ if(err){ ... return; // 加密失败 } // 加密文件成功继续做别的事情 }); }); 如果进一步想在加密之后将密文上传到服务器整个代码就…… readFile(/path/to/somefile, function(err, data){ if(err){ ... return; // 如果读取文件出错 } // 读取文件成功加密data encrypt(data, function(err, ciphertext){ if(err){ ... return; // 加密失败 } // 加密文件成功密文是ciphertext将它上传 upload(ciphertext, function(err, result){ if(err){ ... return; // 上传失败 } // 上传成功 }); }); }); 很多时候要完成的工作都是上面这样一连串的。 js的回调机制就很容易引入如上所示不断嵌套的代码让结果变得十分难看所谓的回调地狱。 为了解决这个问题JavaScript引入了Promise机制。 这样每个函数就都返回一个Promise对象。 Promise对象支持使用.then()这样的方法将流程串联起来 readFile(/path/to/somefile) .then(encrypt) .then(upload) .catch(function(err){ ... // 如果上面某一步出错的话就直接跳到这里 }); 这样简明了许多。 Transcrypt在Promise机制的基础上结合了Python 3引入的async和await语法让上面的过程变得更加直观 async def encryptFileAndUpload(path): try: data await readFile(path) ciphertext await encrypt(data) await upload(ciphertext) except: # 处理错误encryptFileAndUpload(/path/to/somefile) 使用await这些异步的调用又可以写成一系列按顺序完成的代码而不失对各步的控制思路清晰很多。 2. 如何使用Transcrypt? 2.1 安装和调用 Transcrypt可以通过pip安装 $ sudo pip install transcrypt 安装后直接在命令行调用就可以了例如 $ transcrypt main.py 可以将main.py转换成js文件。 类似Python 3在执行代码前会在__pycache__目录中放置Python字节码那样 transcrypt会将转换后的文件放到相应的__javascript__目录。 如果要求转换的是main.py则在__javascript__/中一般会有如下文件 main.mod.js这是仅仅包含main.py各行代码相应js转译的文件。 这个文件中会用很多transcrypt的函数“包装”输入的Python代码但基本上是一对一的对照 因此可供用户检查代码是否有问题等。 main.js这是将main.py转译为js并嵌入transcrypt本身需要的js代码打包而成的文件。 这个文件可以独立嵌入到网页了。 main.min.js。如果见到这个文件说明transcrypt还进行了代码压缩这个文件应该也可以单独运行。 代码压缩minify需要很多运算耗费时间在开发程序时不方便。可以使用-n参数跳过这一步 $ transcrypt -n main.py 这样就可以只生成main.js。 2.2 一些坑 Python和Javascript毕竟是两种语言虽然transcrypt可以在很大程度上将前者翻译为后者 但有些两种语言内在的不一致决定了编程时还需要注意许多坑。 在Transcrypt官网的文档中详细列明了各种坑和其理由。一定要仔细阅读。 2.2.1 类的继承方法的重载 在Python中定义基类和子类是很方便的事情有时候这种编程方式会节约大量时间。 在transcrypt中可以使用类的继承但必须在转译时于命令行使用-e6选项。 这样生成的代码为ECMAScript 6代码才可以启用这样的诸多功能。 重载Python的类自定义诸如__str____getattr__或__setattr__这样的方法 可以编写出非常简明的程序。例如一个模板程序 class Template: def __init__(self): self.__kv {} def __str__(self): return Welcome to {sitename}!.format(self.__kv) def __setattr__(self, key, value): self.__kv[key] value t Template() t.sitename NeoAtlantis print(str(t)) # 输出 Welcome to NeoAtlantis! 这个程序定义的Template类只需要像操作一般的类那样给它的属性赋值 然后用str函数令其生成文本即可。这种用法非常直观但也必须在启用了ECMAScript 6转译后才能利用。 2.2.2 特殊的方法名称 如果要在python中调用一个js模块比如jQuery的$.get的get方法直接调用会出现错误。 根据transcrypt文档的解释这是因为在python中get本身具有特定的用途 故须使用py_get与js_get区别调用python内部和原生js的get方法。 同理对于set方法也有类似的规定。 2.2.3 __pragma__: 很多特性的开关 transcrypt提供了一个__pragma__函数可以在程序中微调转译时的行为。 例如要在python代码中调用jQuery不能直接使用$变量因为$并不是一个规范的Python变量名。 这时就要用__pragma__为$定义一个别名 __pragma__(alias, S, $) 之后就可以在程序中用S代替$来调用jQuery了。 __pragma__能进行的调节有许多。 很多情况下Python本身允许的特性transcrypt出于效率考虑默认不支持便需要通过这一函数启用。请读者务必参考文档。
http://www.zqtcl.cn/news/456327/

相关文章:

  • 百度收录规则桂林seo公司推荐23火星
  • 做百度推广是网站好还是阿里好python开发工具
  • 秦皇岛网站制作小程序开发作图网站
  • 网站建设完整版指数是什么意思
  • 高端企业网站要多少钱网络推广文案招聘
  • 仿门户网站多功能js相册画廊源码 支持缩略小图浏览wordpress模版如何使用
  • 群晖nas可以做网站网页设计与制作步骤
  • 单位网站维护 网站建设岗位兰溪网站建设公司
  • 网站开发什么语言最好网站建设在国内外研究现状
  • 怎么看网站是用什么系统做的永久观看不收费的直播
  • 网站开发如何避免浏览器缓存的影响资讯网站开发的背景
  • 建网站 几个链接站长工具在线平台
  • 东营网站建设策划内容个人备案网站投放广告
  • 建立网站时服务器的基本配置有哪些做网站电信运营许可证
  • 如何阿里巴巴网站做推广方案怎么做网站的浏览栏
  • 织梦做中英文企业网站ui设计工资一般多少钱
  • php网站调试环境搭建关于网站开发的毕业设计
  • 如何在网站上做评比wordpress 图标代码
  • 网站优化建议怎么写pageadmin怎么样
  • 中外商贸网站建设平台合肥响应式网站开发
  • 雨花区区网站建设公司上传文章网站
  • 长春网站z制作自己做背景的网站
  • 浙江英文网站建设陕西百度推广的代理商
  • 怎么看网站蜘蛛网站价格评估 优帮云
  • 南充高端网站建设什么是搜索引擎营销
  • 找做网站的上什么appwordpress esc html
  • 如何做网站效果更好国外效果图网站
  • 西安seo网站推广优化芜湖代理公司注册
  • 某某网站建设策划书2000字长沙专门做网站公司
  • 成都pc网站建设莱州市网站