Algunos desarrolladores han afirmado que Python es más productivo que Java. Es peligroso hacer tal afirmación, porque puede llevar varios días probarlo a fondo. Desde una vista de alto nivel, Java se escribe estáticamente, lo que significa que todos los nombres de variables deben declararse explícitamente. Por el contrario, Python se escribe dinámicamente, lo que significa que no se requiere declaración. Existe un gran debate entre la escritura dinámica y la escritura estática en los lenguajes de programación. Esta publicación no habla de eso. Sin embargo, se debe estar de acuerdo en un punto: Python es un lenguaje interpretado con una sintaxis elegante y eso lo convierte en una muy buena opción para la creación de scripts y el desarrollo rápido de aplicaciones en muchas áreas.
En esta comparación, intentaré cubrir algunos componentes básicos del lenguaje, como cadena, flujo de control, clase, herencia, E / S de archivo, etc. Todos ellos se compararán mediante el uso de ejemplos en paralelo. Espero que esto pueda proporcionar a los programadores de Java una idea general de cómo Python y Java hacen lo mismo de manera diferente. Con un vistazo al código de abajo, podemos fácilmente darnos cuenta de que el código de Python es mucho más corto, aunque algunos «shell de clase» de Java (en Java todo comienza con una definición de clase) no están en la lista. Esta podría ser una de las razones por las que Python puede ser más productivo.
También puede consultar las bibliotecas de Python y los ejemplos de código más populares.
1. Hola mundo
Comience con el programa más simple. Java necesita muchas palabras para imprimir solo una cadena. Este es el primer ejemplo que muestra que Python es más conciso.
Java |
Pitón |
public class Main {
public static void main(String[] args) {
System.out.println("hello world");
}
}
|
public class Main {public static void main (String[] args) {System.out.println («hola mundo»); }}
|
|
En primer lugar, hagamos lo que hagamos en Java, debemos comenzar escribiendo una clase y luego poner nuestros métodos deseados dentro. Esto a veces es muy molesto y hace perder tiempo. En Python, simplemente puede comenzar a escribir su código y luego ejecutarlo.
2. Operaciones con cadenas
public static void main(String[] args) {
String test = "compare Java with Python";
for(String a : test.split(" "))
System.out.print(a);
}
|
public static void main (String[] args) {String test = «comparar Java con Python»; para (String a: test.split («»)) System.out.print (a); }
|
a="compare Python with Java";
print a.split();
|
a = «comparar Python con Java»; imprimir a.split ();
|
Hay muchas funciones relacionadas con cadenas en Python que son tan buenas o mejores que Java, por ejemplo, lstrip (), rstrip (), etc.
3. Control de flujo
int condition=10;
//if
if(condition>10)
System.out.println("> 10");
else
System.out.println("<= 10");
//while
while(condition>1){
System.out.println(condition);
condition--;
}
//switch
switch(condition){
case 1:
System.out.println("is 1");
break;
case 2:
System.out.println("is 2");
break;
}
//for
for(int i=0; i<10; i++){
System.out.println(i);
}
|
int condición = 10; // if if (condición> 10) System.out.println («> 10»); else System.out.println («<= 10"); // while while (condición> 1) {System.out.println (condición); condición–; } // switch switch (condición) {caso 1: System.out.println («es 1»); rotura; caso 2: System.out.println («es 2»); rotura; } // for for (int i = 0; i <10; i ++) {System.out.println (i); }
|
condition=10;
# if
if condition > 10:
print ">10";
elif condition == 10:
print "=10";
else:
print "<10";
#while
while condition > 1:
print condition;
condition = condition-1;
#switch
def f(x):
return {
1 : 1,
2 : 2,
}[x]
print f(condition);
#for
for x in range(1,10):
print x;
|
condición = 10; # if if condición> 10: print «> 10»; condición elif == 10: imprimir «= 10»; si no: imprime «<10"; # while while condition> 1: condición de impresión; condición = condición-1; #switch def f (x): return {1: 1, 2: 2,}[x]
imprimir f (condición); #for para x en el rango (1,10): print x;
|
4. Clase y herencia
class Animal{
private String name;
public Animal(String name){
this.name = name;
}
public void saySomething(){
System.out.println("I am " + name);
}
}
class Dog extends Animal{
public Dog(String name) {
super(name);
}
public void saySomething(){
System.out.println("I can bark");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Chiwawa");
dog.saySomething();
}
}
|
class Animal {nombre de cadena privada; Public Animal (String name) {this.name = name; } public void saySomething () {System.out.println («Yo soy» + nombre); }} class Dog extiende Animal {public Dog (String name) {super (name); } public void saySomething () {System.out.println («Puedo ladrar»); }} public class Main {public static void main (String[] args) {Perro perro = perro nuevo («Chiwawa»); dog.saySomething (); }}
|
class Animal():
def __init__(self, name):
self.name = name
def saySomething(self):
print "I am " + self.name
class Dog(Animal):
def saySomething(self):
print "I am "+ self.name
+ ", and I can bark"
dog = Dog("Chiwawa")
dog.saySomething()
|
class Animal (): def __init __ (self, name): self.name = name def saySomething (self): print «I am» + self.name class Dog (Animal): def saySomething (self): print «I am» + self.name + «, y puedo ladrar» dog = Dog («Chiwawa») dog.saySomething ()
|
Cuando amplía una clase base, no hay ningún requisito, como definir un constructor explícito para el superconstructor implícito.
5. E / S de archivos
File dir = new File(".");// get current directory
File fin = new File(dir.getCanonicalPath() + File.separator
+ "Code.txt");
FileInputStream fis = new FileInputStream(fin);
// //Construct the BufferedReader object
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
String aLine = null;
while ((aLine = in.readLine()) != null) {
// //Process each line, here we count empty lines
if (aLine.trim().length() == 0) {
}
}
// do not forget to close the buffer reader
in.close();
|
Archivo dir = new File («.»); // obtener el directorio actual File fin = new File (dir.getCanonicalPath () + File.separator + «Code.txt»); FileInputStream fis = nuevo FileInputStream (fin); // // Construye el objeto BufferedReader BufferedReader in = new BufferedReader (new InputStreamReader (fis)); String aLine = null; while ((aLine = in.readLine ())! = null) {// // Procesamos cada línea, aquí contamos las líneas vacías if (aLine.trim (). length () == 0) {}} // do no olvide cerrar el lector de búfer in.close ();
|
myFile = open("/home/xiaoran/Desktop/test.txt")
print myFile.read();
|
myFile = open («/ home / xiaoran / Desktop / test.txt») print myFile.read ();
|
Como podemos ver, hay muchas clases que necesitamos importar para simplemente leer un archivo y, además, tenemos que manejar la excepción lanzada por algunos métodos. En Python, son dos líneas.
6. Colecciones
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("a");
al.add("b");
al.add("c");
System.out.println(al);
}
}
|
import java.util.ArrayList; public class Main {public static void main (String[] args) {ArrayList al = new ArrayList (); al.add («a»); al.add («b»); al.add («c»); System.out.println (al); }}
|
aList = []
aList.append("a");
aList.append("b");
aList.append("c");
print aList;
|
aList = []
aList.append («a»); aList.append («b»); aList.append («c»); print aList;
|
Estas comparaciones solo se encuentran en la superficie de Python, para la programación real, el documento de Python sigue siendo el mejor lugar para consultar.