Python语言与javascript语言的区别
2019-02-14吴俊杰
吴俊杰
(西安市第八十九中学,陕西西安,710000)
Python是一类面向对象的解释型的计算机编程语言,在1989年,由荷兰人Guido van Rossum发明,其首次公开发行于1991年。
Pytho n是纯自由软件的一种,它的解释器CPython和源代码遵循GPL (GNU通用公共许可证)许可证。它的语法清晰简洁,其特征之一是强制将空格缩进句子中。
Py t h on有丰富而强大的库。它通常被称为Glu e Language,可以很容易地与用其他语言制作的各种模块(特别是c/c++)连接在一起。一个常见的应用程序是使用Python来快速生成一个原型(有时甚至最终接口)的一个程序,然后重写它一个更合适的语言,如图形渲染模块3d游戏,这是特别要求,可以在c/c++重写,然后在Python封装。可调用的扩展类库。特别注意,其在使用扩展类库时,可能需要考虑关于平台的问题,其中可能存在一些库不提供跨平台实现的问题[1]。
JavaScript是一种具有动态类型、基于原型特征的脚本语言、同时因为内置了对语言类型的支持,它也是一种弱类型编程语言。它最初用于HTML(标准通用标记语言下的应用程序)的页面,实现在HTML页面添加动态功能。
1995年,它由网景公司的Brendan Eich在Web Navig ator浏览器完成首次设计与实现。因为Netscape和Sun一起工作,Netscape的管理层希望它看起来类似Java,所以称它为JavaScript[2]。
1 什么是python语言,什么是JavaScript语言
Python是一种高级脚本语言,其结合了可解释性、交互性、编译性与面向对象性。Python语言具有高可读的特性,有着独特的语法结构,比如java,c语言都是用分号来结束一行代码。而python只需要在第二行用tab键区分。同时不像java,c语言在运行前需要编译和链接,python作为一种解释型语言直接可以运行,这像PHP和Perl语言。
(1)Python是交互式编程语言:交互式可以让用户在提示符下,直接执行用户开发的程序。
(2)Python是面向对象编程语言:python语言像java一样支持面向对象的代码风格,可以定义类,实例类为对象等。
(3)Python是一种适合初学者的语言:python语言简洁易学适合初级程序员来学习,同时它可以支持大型应用程序开发。从表格数据处理到大型游戏。
JavaScript和python一样也是一种脚本语言,主要常见于web工程的开发,因为它能与html和css相互兼容,很多网页用它来实现动态交互功能。在html网页中我们最常用的就是JavaScript语言[3]。
(1)像python语言一样,它是一类解释性脚本语言,在运行前不需要编译和链接。
(2)主要在用在以html 为主的网页中,实现网页的动态交互功能[4]。
(3)JavaScript可以直接嵌入以html为类型的网页中,写成js文件更容易实现代码的分离和维护。
(4)JavaScript像java一样具有跨平台的特性,兼容大多数的浏览器。同时可以在多种平台下运行(如Android、Linux、Windows、iOS、Mac 等)。
Javascript作为一种脚本语言与python,shell等脚本语言类似,不需要编译运行,同时跟大多数语言一样,JavaScript有自己的基本数据类型,语法结构,算术和比较运算符。JavaScript在帮助用户处理数据和文件实际应用中,提供了四种基本的数据类型以及两种特殊的数据类型。同时JavaScript利用变量存放信息,采用表达式来完成功能复杂的操作[5]。
2 python与JavaScript语言的异同点
■2.1 Python与javascript的相同点
这两类语言都属于脚本语言,也称为扩展语言或动态语言,是用于控制软件应用程序的编程语言。脚本通常存储在文本(如ASCII)中,只有在调用时才进行解释或编译[6]。Python与Javascript都是一种脚本语言,这就意味着这两种语言有着脚本语言的特性,比如它们运行都不需要编译链接而是直接在解释器中运行,它们都属于动态类型,有着自动的内存管理。调用Eval()语句实现执行脚本和其他脚本语言也是它们的共同特性。同时,其在定义变量时,并不需要区分像C与Java语言区分等变量。
■2.2 python和javascript的不相同点
Javascript是被设计在客户端上的一种脚本语言,因此主要应用在浏览器中,它的语言与java语言类似。Python具备高可读,简单易学,常被初学者喜欢,用在数据处理,机器学习当中比较多。
(1)它们编程范式不相同。编程范式是计算机编程的一种基本风格,指导如何构建程序的结构和元素,简言之,就是指计算机编程的基本风格或模型。从哲学的角度来说,如果每个程序员都在创造一个虚拟世界,那么编程范式就是他们有意识或无意识地采用的世界观和方法论。
Python与Javascript均支持很多不同的编程范例,但它们在面向对象编程方面差别很大。面向对象的Javascript是基于原型,对象继承由prototype(和Object)创建,prototype对象创建的对象继承原型链上的方法。Python是一种常规的基于类的继承,自然支持多态性的语言。
(2)多线程模型不相同。我们通常称进程为程序(指令和数据集合的有序集合我们成为程序)的一次执行,它是计算机系统进行资源分配的基本单位同时也是调度的一个基本单位,为了提高程序的并发度和进一步提高资源的利用率,我们引进了线程,通常来说线程是进程的实体,一个进程有多个或者至少一个线程组成,线程也是能够独立运行的单位,但是它与线程的区别是不具备独立的资源,多个线程共用同一进程的资源,当然线程具有程序计数器、栈与寄存器。
JavaScript语言没有多线程的引入,其通过并发事件驱动方式来进行,所有的JavaScript程序都运行于一个线程是它的特点。虽然在HTML5中引入web worker可以并发处理任务,但是这并没有改变Javascript语言的的单线程限制。
Pytho n采用引入线程包来支持多线程。线程化用于提供与线程相关的操作,线程是应用程序中最小的单元。Python的多线程库的当前版本没有实现优先级,线程组,线程不能停止、暂停、恢复、中断。线程模块提供了类:线程、锁、Rlock、条件信号量、事件、定时器这些资源。
(3)数据类型的可变性不一样。在Python语言中,一些数据类型是不可变的,这意味着一旦这些数据类型的变量被创建,都是不可修改的,如果修改就会返回新对象(python语言中一切皆是对象)。相比在Javascript语言中,所有数据类型被创建后也可以被更改。结合多线程的概念,JavaScript不支持多线程所以修改不影响线程的安全性,但是python是支持多线程的语言一旦修改将会对线程的安全性产生不可估计的影响。
(4)数据类型并不完全相同。Javascript的数据类型相对更简单,包含6个对象、字符串、布尔值、数字、空值和未定义的值。Python中的一切都是对象,比如模块、函数、类等。同时Python有5种内置的简单数据的类型,分别为int类型、bool类型、long类型、 fl oat类型与complex类型,及容器类型、内部类型、代码类型等。布尔值:Python有真有假。Javascript有真和假。它们只是大写字母。
UTF16是JavaScript的编码方式,而Python的编码方式是ASCII,为了适应中文就需要encode和decode来不断编码和解码。Python支持unicode编码方式,需要在字符串前加u,如u “aaaa”。
在数值上JavaScript全都是64位浮点数的数值类型,并且支持NaN(不是一个数字),正无穷和负无穷(+/-In fi ity)。Python有许多数值类型,它的主要优势在于复数类型实现非常方便,从而在数据处理和人工智能上应用比较多。
列表:Javascript中有内置数组类型(数组也属于对象)。Python的列表更接近Javascript的数组,元组可以理解为不可变列表。除了使用内置的方法len(在Python中查找长度)外,Python和Javascript基本提供了对列表进行操作的各种方法。其中与JavaScript语言相比Python在列表下标的操作上非常方便与灵活,比如,l[5:-1], l[6]等。
哈希表、字典、对象:Javascript中使用大量{}来进行对象创建,这些对象与字典并无区别,你可以使用键值对的形式访问对象的成员。你可以动态添加、修改和删除键值对,因为可以认为这是JavaScript的哈希表或者字典。(对象的键必须为字符串)而在Python语言中有内置哈希表(dictS), 这个与Javascript语言的不同之处为,dictS其可以有各种不同的类型的键值。
空值:Javascript中定义了两种空值。未定义则表示变量未进行初始化。Null表示变量已进行初始化,但其值是空。
一个完善的制度体系可以给管理者们起到良好的辅助作用,更可以让员工约束其自身,促进工程进度,打消员工消极怠工的状态,增强团队的管理体系,完善制度从以下几方面入手:
(5)赋值逻辑的操作不同。Javascript中使用=赋值,同时它拥有判断相等(==)与全等(===)两种形式,它的逻辑运算符或与分别是||,&&,这雨大多数语言类似。在Python中并没有全等,and表示与,or表示或,因为python语言看上去更接近自然的语言。
在Python的赋值操作中不允许返回赋值结果是一个重要的改进,这个改进的好处是可以避免错误地使用赋值运算,尤其是在判断相等时这是因为这两个运算符非常地相似,它们与自然语言没有区别。Python不支持++运算符,您不再需要考虑是先传值和重新赋值,还是先赋值和先传值,这取决于++符号在变量的左边和右边的位置。在连续赋值中, Python使用tuple可以一次分配多个变量。
(6)其他不同点。包管理和作用域也不相同,Javascript的作用域由method函数定义,此表示同一方法内部具有相同作用域。Python的作用域由函数、模块和类定义。Python包的导入能很好地管理依赖关系与作用域,相对而言,由于Javascript并没有本地包管理的机制,需要 AMD异步加载的同时依赖于JS文件,其中requirejs也是一种比较常见的工具。
3 如何选择python和JavaScript语言的应用
虽然python语言和JavaScript语言都为动态语言和用作脚本语言,这两种语言在细节上有很多不同,从而相关的开发人员会根据不同的项目来选择不同的语言。JavaS-cript语言与html,css相互兼容,通常在在web项目中实现,借助JavaScript语言可以实现动态网页。而python语言由于列表,字典等数据结构有很多内置的函数或者简易的读取策略,通常在数据处理上用到的特别多。下面分别介绍JavaScript和python语言的应用。
■3.1 在html中利用JavaScript语言实现动态交互
下图分别为用html语言制作的图片拼图游戏和利用JavaScript语言实现游戏动态交汇,即可以通过鼠标移动图片块。从图1可以看出用到了JavaScript语言。
图1
■3.2 利用python实现网络爬虫
网络爬虫是一个程序或脚本自动抓取信息从万维网根据某些规则。它广泛应用于互联网搜索引擎或其他类似网站。它可以自动收集它可以访问、获取或更新这些网站的内容和搜索方法的所有页面的内容。从功能上讲,爬虫一般分为三部分:数据采集、处理和存储。web爬虫的基本工作流程如下:
(1)首先选取要爬取的种子,即url;
(2)将要爬取的url整合成url队列,在接下来提供;
(3)从第二部的url队列中选取要解析的url,然后通过解析DNS,获取主机IP,下载url获取的web网页,并进行存储。此外,将URL放入已抓取URL队列之中。
(4)分析已抓取的URL队列的URL,分析里面其他的URL,并将URL放入待抓取的URL队列之中,从而进入下一个循环。
本例主要是爬取58同城网站上出现的火车站信息。第一层根据url:http://lieche.58.com/checi/kuai.html爬取网页上出现的所有车次。
第二层是将第一层爬取的所有车次依次拼接URL:http://lieche.58.com/checi/
产生类似这样的url:http://lieche.58.com/checi/K1595/。之后爬取下图的详细信息。
爬取的部分代码如图2所示。
图2