您的位置:首页 > 编程语言 > Python开发

阿里巴巴教研专家为你解答Python和Java有什么区别?

2018-01-26 23:01 603 查看
python和java是两种非常不同的编程语言,但都可以为现代开发有用的工具。如果你正在考虑第一次学习编程,那么你可能会发现Python更容易掌握。Python的语法设计是直观的和相对简单的让新手快速启动各种应用程序编写代码。而java有一个陡峭的学习曲线,它的发展将在任何平台上运行的应用程序是非常有用的。



这里还是要推荐下小编的Python学习群:589 3O6 326,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2017最新的Python资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。

Python and Java are two very different programming languages, but both are very useful tools for now programmers. If you start thinking about learning programming, you may find that Python is more easy to learn. Pyton's grammatical design is very
intuitive, and its relative simplicity allows the novice to quickly handwrite a variety of applications. Java's learning curve is steeper, and it is very suitable for developing applications that can run on various platforms.

Dynamic vs Static Typing 动态类型 vs. 静态类型



一个python和java之间最大的差异是每个语言变量的方式处理。java的力量你定义一个变量的类型,当你第一次宣布它将不允许你在程序后更改类型。这称为静态类型。相反,Python使用动态类型,它允许您通过用字符串替换一个整数来改变变量的类型,例如。

Dynamic typing is more manageable for rookie programmers, because it means that you can use your variables as you want, without having to worry too much about their types. However, many developers argue that static types reduce the undiscovered
errors that have plagued your program. Without the need for explicit declarations before the variable is used, it is easy to misspell the variable name and accidentally create a new variable.

Braces vs Indentation 括号 vs. 缩进

Python在编程语言中很少见,因为它使用缩进将代码分成块。java,像大多数其他语言,使用花括号定义开始和结束每一个函数和类定义。使用缩进的优点是它迫使你以一种易于阅读的方式设置程序,而且不会丢失缺少括号的错误。

Python与众多编程语言的不同之处还在于它使用缩进将代码分割成块。Java,像大部分其他语言一样,使用大括号定义函数和类定义的开头和结尾。使用缩进的好处在于它强迫你将你的程序写得比较易读,不会有缺括号导致错误的可能。

速度和可移植性可移植性速度vs.

java的巨大优势是,它可以被用来创建平台无关的应用程序。任何电脑或移动设备能够运行java虚拟机可以运行一个java应用程序,而运行Python程序你需要一个编译器,可以把Python代码到代码,您的特定操作系统可以理解的。多亏了java的流行的Web应用程序和简单的桌面程序,大多数设备已经有java虚拟机安装的,所以一个java程序员可以确信他们的应用程序将被几乎所有用户可用。运行在一个虚拟机的缺点是,java程序运行更慢比Python程序。



java的一个很大的好处就是它可用于开发平台独立的应用。任何可以运行虚拟机的电脑或者移动设备都可以运行java java的应用,而不管你在哪里运行Python的程序你都需要一个编译器来将Python代码转化为你特定的操作系统可理解的代码。归功于java web应用和简单桌面程序的流行,大部分设备已经安装了java虚拟机,所以java程序员可以自信的说他们的应用几乎对所有用户都可用在虚拟机内运行程序的缺点是程序比Python的程序运行速度要慢java。

Python与java:这是更容易使用吗?Python与java哪一个更加易学?

java 程序要编译以后才能运行, python 不用

java 变量声明为一个类型以后就永远是那个类型的, python 的变量可以改变来行

java 的程序都是分成 class,python 程序可以没有 class

java 的语法里有很多 {} 括号和分号,python 程序的每一段都是用 indent 区分的

大多数程序员都同意Python是新手程序员学习的较简单的语言。你会进步的更快如果你正在学习Python作为第一语言比java。然而,java意味着学习这个强大的语言是必要的如果你想开发Android的应用程序的普及,例如。

大部分程序员同意Python对于新手程序员更加易学这一观点。如果你把Python作为第一门编程语言学习,你的进步速度会比首先学习java要快。然而,java的流行意味着学习这门强大的语言是必须的,比如说,假如你想要开发安卓应用程序的话。

基本概念

Python和Javascript都是脚本语言,所以它们有很多共同的特性,都需要解释器来运行,都是动态类型,都支持自动内存管理,都可以调用eval()来执行脚本等等脚本语言所共有的特性。

然而它们也有很大的区别,Javascript这设计之初是一种客户端的脚本语言,主要应用于浏览器,它的语法主要借鉴了C,而Python由于其“优雅”,“明确”,“简单”的设计而广受欢迎,被应用于教育,科学计算,web开发等不同的场景中。

编程范式



Python和Javascript都支持多种不同的编程范式,在面向对象的编程上面,它们有很大的区别。Javascript的面向对象是基于原型(prototype)的, 对象的继承是由原型(也是对象)创建出来的,由原型对象创建出来的对象继承了原型链上的方法。而Python则是中规中矩的基于类(class)的继承,并天然的支持多态(polymophine)。

OO in Pyhton

class Employee:

'Common base class for all employees'

empCount = 0 ##类成员

def __init__(self, name, salary):

self.name = name

self.salary = salary

Employee.empCount += 1

def displayCount(self):

print "Total Employee %d" % Employee.empCount

def displayEmployee(self):

print "Name : ", self.name, ", Salary: ", self.salary

## 创建实例

ea = Employee("a",1000)

eb = Employee("b",2000)

var empCount = 0;

//构造函数

function Employee(name, salary){

this.name = name;

this.salary = salary;

this.empCount += 1;

}

Employee.prototype.displayCount = function(){

console.log("Total Employee " + empCount );

}

Employee.prototype.displayEmployee = function(){

console.log("Name " + this.name + ", Salary " + this.salary );

}

//创建实例

var ea = new Employee("a",1000);

var eb = new Employee("b", 2000);

因为是基于对象的继承,在Javascript中,我们没有办法使用类成员empCount,只好声明了一个全局变量,当然实际开发中我们会用更合适的scope。注意Javascript创建对象需要使用new关键字,而Python不需要。

除了原生的基于原型的继承,还有很多利用闭包或者原型来模拟类继承的Javascript OO工具,因为不是语言本身的属性,我们就不讨论了。

线程模型

在Javascript的世界中是没有多线程的概念的,并发使用过使用事件驱动的方式来进行的, 所有的JavaScript程序都运行在一个线程中。在HTML5中引入web worker可以并发的处理任务,但没有改变Javascript单线程的限制。

Python通过thread包支持多线程。

不可改变类型 (immutable type)

在Python中,有的数据类型是不可改变的,也就意味着这种类型的数据不能被修改,所有的修改都会返回新的对象。而在Javascript中所有的数据类型都是可以改变的。Python引入不可改变类型我认为是为了支持线程安全,而因为Javascript是单线程模型,所以没有必要引入不可改变类型。

当然在Javascript可以定义一个对象的属性为只读。

var obj = {};Object.defineProperty(obj, "prop", {

value: "test",

writable: false});

在ECMAScript5的支持中,也可以调用Object的freeze方法来是对象变得不可修改。

数据类型

Javascript的数据类型比较简单,有object、string、boolean、number、null和undefined,总共六种

Python中一切均为对象,像module、function、class等等都是。

Python有五个内置的简单数据类型bool、int、long、float和complex,另外还有容器类型,代码类型,内部类型等等。

布尔

Javascript有true和false。Python有True和False。它们除了大小写没有什么区别。

字符串

Javascript采用UTF16编码。

Python使用ASCII码。需要调用encode、decode来进行编码转换。使用u作为前缀可以指定字符串使用Unicode编码。

<
b7e0
p>数值
Javascript中所有的数值类型都是实现为64位浮点数。支持NaN(Not a number),正负无穷大(+/-Infiity)。

Python拥有诸多的数值类型,其中的复数类型非常方便,所以在Python在科研和教育领域很受欢迎。这应该也是其中一个原因吧。Python中没有定义NaN,除零操作会引发异常。

列表

Javascript内置了array类型(array也是object)

Python的列表(List)和Javascript的Array比较接近,而元组(Tuple)可以理解为不可改变的列表。

除了求长度在Python中是使用内置方法len外,基本上Javascript和Python都提供了类似的方法来操作列表。Python中对列表下标的操作非常灵活也非常方便,这是Javascript所没有的。例如l[5:-1],l[:6]等等。

字典、哈希表、对象

Javascript中大量的使用{}来创建对象,这些对象和字典没有什么区别,可以使用[]或者.来访问对象的成员。可以动态的添加,修改和删除成员。可以认为对象就是Javascript的字典或者哈希表。对象的key必须是字符串。

Python内置了哈希表(dictS),和Javascript不同的是,dictS可以有各种类型的key值。

空值

Javascript定义了两种空值。 undefined表示变量没有被初始化,null表示变量已经初始化但是值为空。

Python中不存在未初始化的值,如果一个变量值为空,Python使用None来表示。

Javascript中变量的声明和初始化

v1;

v2 = null;

var v3;

var v4 = null;

var v5 = 'something';

在如上的代码中v1是全局变量,未初始化,值为undefined;v2是全局变量,初始化为空值;v3为局部未初始化变量,v4是局部初始化为空值的变量;v5是局部已初始化为一个字符处的变量。

Python中变量的声明和初始化

v1 = None

v2 = 'someting'

Python中的变量声明和初始化就简单了许多。当在Python中访问一个不存在的变量时,会抛出NameError的异常。当访问对象或者字典的值不存在的时候,会抛出AttributeError或者KeyError。因此判断一个值是否存在在Javascript和Python中需要不一样的方式。

Javascript中检查某变量的存在性:

if (!v ) {

// do something if v does not exist or is null or is false

}

if (v === undefined) {

// do something if v does not initialized

}

注意使用!v来检查v是否初始化是有歧义的因为有许多种情况!v都会返回true

Python中检查某变量的存在性:

try:

v

except NameError

## do something if v does not exist

在Python中也可以通过检查变量是不是存在于局部locals()或者全局globals()来判断是否存在该变量。

类型检查

Javascript可以通过typeof来获得某个变量的类型:

typeof in Javascript 的例子:

typeof 3 // "number"

typeof "abc" // "string"

typeof {} // "object"

typeof true // "boolean"

typeof undefined // "undefined"

typeof function(){} // "function"

typeof [] // "object"

typeof null // "object"

要非常小心的使用typeof,从上面的例子你可以看到,typeof null居然是object。因为javscript的弱类型特性,想要获得更实际的类型,还需要结合使用instanceof,constructor等概念。具体请参考这篇文章(http://tobyho.com/2011/01/28/checking-types-in-javascript/)

Python提供内置方法type来获得数据的类型。

>>> type([]) is list

True

>>> type({}) is dict

True

>>> type('') is str

True

>>> type(0) is int

True

同时也可以通过isinstance()来判断类的类型

class A:

pass

class B(A):

pass

isinstance(A(), A) # returns True

type(A()) == A # returns True

isinstance(B(), A) # returns True

type(B()) == A # returns False

但是注意Python的class style发生过一次变化,不是每个版本的Python运行上述代码的行为都一样,在old style中,所有的实例的type都是‘instance’,所以用type方法来检查也不是一个好的方法。这一点和Javascript很类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python爬虫
相关文章推荐