Некоторые разработчики утверждают, что Python продуктивнее Java. Опасно утверждать такое, так как для проверки нужно как минимум несколько дней. С точки зрения профессионалов, Java строго типизированный язык программирования, это значит, что названия переменных должны быть явно декларированы. В противовесе мы имеем динамически типизированный Python, в котором декларирование не требуется. Существует множество споров на счет динамической и статистической типизации в языках программирования, но данная статья не об этом. Однако, одну мысль стоит взять на заметку: Python — интерпретируемый язык с элегантным синтаксисом, что делает его отличным решением для написания скриптов и быстрой разработки приложений в различных сферах.
В данном сравнении я постараюсь затронуть несколько базовых языковых компонентов, таких как строки, классы, потоки управления, наследования, файлы i/o, и другие. Их я буду сравнивать бок о бок в своих примерах. Надеюсь, эта статья раскроет программистам Java принцип, по которому Java и Python выполняют одинаковые задачи по-разному. Посмотрев на приведенный пример кода ниже, мы увидим, что код Python значительно короче, при том, что оболочка класса Java (в Java мы все определяем как класс) даже не указана. Это одна из причин, почему Python может быть более продуктивным.
Hello World
Начнем с простейшей программы. Java требует много букв для вывода одной строки. Это первый пример, в котором наглядно демонстрируется лаконичность Python.
Java
1 2 3 4 5 |
public class Main { public static void main(String[] args) { System.out.println("hello world"); } } |
Python
1 |
print("hello world"); |
Что-бы мы не делали в Java, нам нужно начать с создания класса, который будет содержать необходимый метод (методы). Иногда это раздражает и забирает время. В Python вы можете просто начать писать код и запустить его.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Операции со строками
Java
1 2 3 4 5 |
public static void main(String[] args) { String test = "compare Java with Python"; for(String a : test.split(" ")) System.out.print(a); } |
Python
1 2 |
a = "compare Python with Java"; print(a.split()) |
Python предоставляет много функций, связанных со строками, которые если не хуже, то лучше тех, которые содержит Java. Например: lstrip(), rstrip(), и т.д.
Управление потока
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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); } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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) |
Классы и наследование
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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(); } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 %s, and I can bark" % self.name) dog = Dog("Chiwawa") dog.saySomething() |
Когда вы расширяете основной класс, нет необходимости в определении конструктора расширения для неявного суперконструктора.
Работа с файлами
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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(); |
Python
1 2 3 4 |
my_file = open("/home/xiaoran/Desktop/test.txt") print(my_file.read()) my_file.close() |
Как мы видим, здесь много классов, которые нам нужно импортировать, чтобы просто прочитать файл, и как дополнение, нам нужно обработать исключения, вызванные некоторыми методами. В Python это всего три строки.
Коллекции
Java
1 2 3 4 5 6 7 8 9 10 11 |
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); } } |
Python
1 2 3 4 5 6 7 |
aList = [] aList.append("a") aList.append("b") aList.append("c") print(aList) |
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»