Регистрация | Вход 
Просмотр статьи
Введение в Python

Характеристика кроссплатформенного языка Python

Приветствие! На конец-то я взялся за очередную статью по программированию ради моего хорошего друга. Только, к сожалению, на этот раз она, скорее всего, не будет захватывающей. Я просто опишу вам новый для меня язык: Python.

Зачем? Можете спросить вы... А кто его знает!

Не сидится мне на месте. Вот и решил в очередной раз поставить Линукс... Ну вот, а как же без программирования. На с++ я не собираюсь писать. Тут-то мне и пришло в голову наткнуться на Python.

Язык мне очень понравился. Почему? Да сами увидите.

+ После покупки смартфона Nokia нашел возможность программировать под него на этом прекрасном языке. Да еще и интерактивная консоль в мобилке! :)

Поехали!

Перед обсуждением особенностей языка, давай проинсталлируем нужные пакеты для работы. Не забываем о всеми любимой википедии:

Python портируем и работает почти на всех известных платформах — от КПК до мейнфреймов. Существуют порты под Microsoft Windows, все варианты UNIX (включая FreeBSD и GNU/Linux), Plan 9, Mac OS и Mac OS X, Palm OS, OS/2, Amiga, AS/400 и даже OS/390, Symbian и Android

Поэтому, если вы счастливый обладатель какой-то платформы (из выше перечисленных), то вам стоит только позавидовать :). Идем на сайт питона: http://python.org и в секции Downloads ищем пакеты под вашу платформу.

Если у вас стоит подобие Линукса, то все можно сделать куда проще. Сейчас малодистрибутивов обходится без питоновых скриптов, значит у вас 85% запустить на исполнение программу без каких-то подготовок.

Получить базовые пакеты вы можете командой (Debian only):

sudo apt-get install python

Что же мы получили? Интерпретатор Python и базовые библиотеки для работы.

Чем же он особенный?

Ну вот, на конец-то я добрался до этой части статьи. Далее мы с вами будем сравнивать самые популярные языки программированя.

Дубль 1

Для начала поговорим о том, что все так восхваляют в питоне: простота синтаксиса.

Да, действительно. Меня поразил пример кода с первого взгляда. Давайте напишем для сравнения программы, которые будут вычислять сумму первых 1000 чисел (используя цикл).

Для начала я выбрал С# (синтаксис также схож с Java), на котором я до этого программировал:

using System;
class Application
{
	public static void Main()
	{
		int sum = 0;
		for (int i = 0; i <= 1000; i++)
		{
			sum += i;
		}
		Console.WriteLine(sum.ToString());
	}
}

Далее пусть будет С++:

#include <iostream>
void main()
{
	int sum = 0;
	for (int i = 0; i <= 1000; i++)
	{
		sum += i;
	}
	cout << sum;
}

PHP:

<?php
	$sum = 0;
	for ($i = 0; $i <= 1000; $i++)
	{
		$sum += $i;
	}
	echo $sum;
?>

Писанины вначале меньше, но меня убивает знак доллара вначале переменных.

Ну и, на конец-то, герой дня — Python:

for i in range(1001):
	sum = sum + i
print sum

Классно, да? :)

Ну вот, думаю, вы ощутили разницу в написании кода. Времени на питон уходит раза в 3 меньше. Но вместе и с тем есть свои минусы (о них позже)

Дубль 2

Допустим, вы написали супер популярную программу, от вас требуют перенести ее на другие платформы... Как вы поступите?

Рассмотрим сразу язык С/С++

Он есть кроссплатформенный, но мало чего стоит без внешнего API. Поэтому перенести такой код будет ой как нелегко.

C#: как мы знаем, компилятор IL-кода портирован под несколько других платформ. Для примера возьмем Mono (http://mono-project.org). Да, некоторые библиотеки реализованы, но написать какое-то нормальное GUI-приложение очень тяжело, да и некоторые полезные части тоже не работают, например, сокеты.

Для запуска программы, написанной на С#, вам придется скачать библиотеку Mono(Linux), .Net Framework(Windows). Их размер достигает >50 мб.

PHP: ну что тут скажешь :) Если подумать, то его как-то некорректно сравнивать с языками, которые есть в статье. Он прекрасно работает на разных платформах.

Java: по синтаксису очень похож на С#, да и по возможностям. Занимает не мало места, сравнительно медленный. На счет переносимости, то тут пока ничего не скажешь. Компилятор байт-кода портирован почти под все существующие платформы.

Python: вот эта часть мне особенно понравилась. Вам не нужно писать разный код под разные платформы! Все просто: есть python-файл со скриптом, запускаем его — работает. В нашем случае работа с ОС и другими частями портирована прекрасно, нет никаких проблем. Интерпретатор языка весит не более 10 мб вместе со всеми самыми полезными библиотеками.

Дубль 3

Другие особенности Питона:

  • автоматическое управление памятью, что также присутствует в Java, C#.
  • Run-time обработка типов. Тут можно долго спорить, но мне эта особенность нравится. Т.е. во время написания программы неизвестный тип переменной, только во время исполнения.
  • В Питоне базовые типы не относятся к чему-нибудь другому, они есть простыми объектами классов. Что повышает уровень абстракции, на котором пишется код.
  • Теперь вы можете смело использовать множественное наследование.
  • Не нужно предварительно объявлять переменную, она записывается в памяти после первого присвоения (что вы можете увидеть во втором дубле на примере Питона).
  • Поддержка чисел с бесоконечной точностью.
  • Невозможно неправильно обработать объект. Т.е. невозможно допустить несоответствие типов.

Теперь немного математики. Давайте напишем простую программу, которая будет вычислять факториал числа (ну а что же еще остается? :)). Не будем использовать рекурсию, только цикл. И пишем на алгоритмическом языке (насколько я его помню):

получаем число

пока число не равно 0

умножаем число на сумму

уменьшаем число на 1

Все ок, реализовать можно на любом языке. Но на какое время его хватит? :) Имею ввиду максимальное число, с которого можно раздобыть факториал.

Давайте напишем на С# такую функцию:

public static int Factorial(int number)
{
	answer = 1;
	for (int i = number; i >0; i--)
	{
		answer *= i;
	}
	return answer;
}

Но int-овская переменная может принимать не более 65535 по модулю.

Есть, конечно, long и т.д., но их все-равно не хватит на большие числа. Как же в таком случае поступают? Проблему можно решить, если использовать строки. Но в Питоне все просто, давайте напишем ф-цию, которая найдет нам факториал числа 100:

def factorial(Number):
  sum = 1L
  for iL in range (1, Number + 1):
    sum = sum * iL
  return sum

if __name__ == "__main__":
  print factorial(100)

Как видите, после цифр мы дописываем 'L', что значит long-значение. И в функции range мы начинаем отсчет с 1, а не 0.

Вот и сам вывод результата:

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Теперь давайте поговорим о минусах Питона, потому что нету ничего идеального. Я заметил только один недостаток: скорость работы. Python — интерпретируемый язык, поэтому равняться скоростью с С/С++ он не может. Из-за этого его не используют для работы с графикой и вещами, которые требуют быстродействия. Конечно, с годами все совершенствуется. Скорость работы интерпретатора возросла во много раз. Но если вам все-же нехватает скорости исполнения программы вы можете попробовать язык Lua, который пошел от Питона. Он не такой распространенный, но очень быстрый (сравнительно), его, даже, используют в играх в качестве скриптового движка.

Финальная часть

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

Удачи.

Тысленко Макс (Ockonal at vestace.ru)

18.02.2009


Автор: Ockonal
Дата публикации: 21.02.2009
Число просмотров: 1484

Возврат


Copyright 2007-2009 by Alexander Ignatyev