Как я впервые попробовал Python вместо Java

автор Евгений Экгардт

6 Окт 2015

Как-то я прочитал: «Сначала ты изучаешь один язык программирования для решения некоторой задачи, потом понимаешь, что есть язык более подходящий для этой задачи, и изучаешь его, а через 10 лет ты пишешь свой язык программирования, который решит эту задачу».

Возможно, моё сознание исказило эту мысль со временем, и я пересказал вам ее не так, как в первоисточнике. Но нам, разработчикам, нельзя стоять на месте и всю жизнь писать на одном языке. Сегодня я хочу поделиться небольшим опытом, как для решения определенной задачи я использовал Python вместо Java, и насколько мне это понравилось.

Задача

У нас есть JSON с описанием кодов стран. Задача состояла в том, чтобы взять из JSON название каждой страны, потом сделать запрос на веб-сервис (в моем случае это был yandex.translate) с запросом на перевод этой строки и, вернув результат, записать его в тот же JSON новым дополнительным полем. Затем проделать все то же самое, но записать в определенный формат plist для iOS версии.

Решение

Поскольку эта задача выходила за рамки проектных работ в части Android-разработки, то я решил подумать над реализацией задачи на другом языке. Как мне показалось, на Java писать такой объем по количеству кода немного громоздко и совсем неинтересно. Поэтому я выбрал Python. Я слышал об этом языке достаточно много хороших отзывов, и мне было интересно посмотреть, как он работает. Писал я в обычном блокноте. На нем у меня обе программы заняли мало кода.

Вот что получилось.

Для Android:

import requests
import json

with open('codes.json') as data_file:    
    data = json.load(data_file)

data_file.close()

for i in data['codes']:
    payload = {'key': 'trnsl.1.1.20150901T124624Z.e170a12817a8be05.0addea6cf692e5b3f6fac59322a7a9d433ff21e2', 'lang': 'ru-en', 'text': i['title_rus']}
    r = requests.get('https://translate.yandex.net/api/v1.5/tr.json/translate', params=payload)
    i['title_eng'] = r.json()['text'][0]
    print(r.json()['text'][0])

for i in data['codes']:
    payload = {'key': 'trnsl.1.1.20150901T124624Z.e170a12817a8be05.0addea6cf692e5b3f6fac59322a7a9d433ff21e2', 'lang': 'ru-es', 'text': i['title_rus']}
    r = requests.get('https://translate.yandex.net/api/v1.5/tr.json/translate', params=payload)
    i['title_esp'] = r.json()['text'][0]
    print(r.json()['text'][0])

with open('full_codes.json', 'w') as json_file:
    json.dump(data, json_file)

raw_input()	

Для iOS:

import requests
import json
import plistlib

with open('codes.json') as data_file:    
    data = json.load(data_file)

data_file.close()

f = []

for i in data['codes']:
    #payload = {'key': 'trnsl.1.1.20150901T124624Z.e170a12817a8be05.0addea6cf692e5b3f6fac59322a7a9d433ff21e2', 'lang': 'ru-en', 'text': i['title_rus']}
    payload = {'key': 'trnsl.1.1.20150901T124624Z.e170a12817a8be05.0addea6cf692e5b3f6fac59322a7a9d433ff21e2', 'lang': 'ru-es', 'text': i['title_rus']}
    res = requests.get('https://translate.yandex.net/api/v1.5/tr.json/translate', params=payload)
    d = {'ISO' : i['country_iso'], 'PhoneCode' : i['country_code'], 'Title' : res.json()['text'][0]}
    f.append(d)
    print(res.json()['text'][0])

with open('ios_codes_es.plist', 'w') as plist_file:
    plistlib.writePlist(f, plist_file)
plist_file.close();
    
raw_input()	

Выводы

В результате я вышел за пределы мышления объектно ориентированного языка и посмотрел, что предоставляет собой Python в рамках решения моей задачи. Надо сказать, что я был приятно удивлен результатом. Конечно, если рассматривать Python как замену Java для полноценного проекта, то это будет нереально — все равно все взаимодействие с UI будет происходить через Java, как это обстоит и в случае C++, и с Ruby. Тем не менее, Python отлично справляется с решением определенной части проекта.

Подводя итог, могу сказать, что мозги я размял отлично. Мне понравилось, насколько шустро работает Python, как лаконично и просто выглядит код. Кроме этого, я подтвердил свою мысль, что нужно выбирать язык, максимально подходящий под конкретную задачу.

  • 0 Репосты

Комментарии

Фильтр

Закрыть

Технологии

Индустрии