Питоны. Работа с файловой системой

Питоны давно отвоевали себе звание самых больших рептилий на планете. Правда, с ними соперничает , но после того, как в одном из зоопарков был обнаружен сетчатый питон 12 метров в длину, первенство анаконды уже под сомнением. Многие считают, что самая большая змея-питон . И все же, основной размер этих змей от 1 метра до 7, 5.

Окраска этих рептилий слишком многообразна. Есть виды с кожей коричневатых, бурых тонов, а есть и такие, которые своей яркостью и пестростью просто поражают. Как правило, это всевозможные вариации пятен. Ученые утверждают, что двух питонов с одинаковыми пятнами найти невозможно. Могут быть питоны и одноцветной окраски (зеленый питон).

Особенным «гурманом» среди этих змей слывет черноголовый питон. В его меню входят только вараны и змеи. В процессе борьбы ядовитая жертва иногда кусает охотника, но змеиный яд не действует на этого питона.

Считается, что эта рептилия не может проглотить добычу, которая весит более 40 кг, поэтому взрослый человек не сможет стать для змеи едой. К тому же, человеческая фигура- не слишком удобный предмет для глотания.

С животными питон поступает так- он начинает заглатывать свою жертву с головы, рот змеи растягивается до невероятных размеров, а затем постепенно на тушу начинает натягиваться тело , как мешок.

Причем, в это время змея слишком уязвима. С человеком это проделывать крайне неудобно- сначала проходит голова, а потом продвигаются плечи, они-то и мешают с легкостью продвигаться телу в змеиный желудок. И все же, случаи нападения на человека были зафиксированы.

Наевшись, питон отправляется отдыхать. Для того, чтобы переварить пищу ему потребуется не один день. Порой такое переваривание доходит до нескольких недель, а то и месяцев. В это время питон не ест. Известен такой случай, когда змея не ела 1, 5 года.

Размножение и продолжительность жизни питонов

Питоны приносят потомство только раз в году, случается, что условия неблагоприятные, и тогда размножение происходит еще реже. Самка, готовая к спариванию, оставляет после следы, по их запаху самец ее и находит.

Брачное ухаживание заключается в трении самца о самку анальными шпорами. После того, как «любовный» акт завершен, самец утрачивает всякий интерес к самке с ее будущим потомством.

На фото кладка питона

Самка же, спустя 3-4 месяца, делает кладку. Количество яиц может быть от 8 до 110. Для того, чтобы сохранить нужную температуру в кладке, змея укладывается на них, сворачивается кольцом и не покидает кладку ни при каких обстоятельствах.

Она не уходит с кладки даже для того, чтобы поесть, все два месяца совсем голодна. Она же регулирует температуру – если становится слишком жарко, то кольца раздвигаются, давая к яйцам доступ прохладного воздуха, если же температура падает, что змея начинает поднимать ее своим телом- она дрожит, тело согревается, и тепло передается будущим малышам.

Маленькие питоны при рождении длиной всего 40-50 см, на зато они уже не нуждаются в помощи матери, они совсем самостоятельные. И все же, совсем взрослыми, то есть, половозрелыми, они станут только к 4-6 годам.

Срок жизни этих удивительных змей питонов колеблется от 18 лет до 25. Имеются данные о питонах, которые проживали 31 год. Однако, эти данные касаются только тех экземпляров, которые находились в зоопарках или питомниках. В дикой природе срок жизни этих змей не установлен.


Питоны - одни из самых больших рептилий в мире. Они входят в семейство Ложноногих змей и состоят в родстве с анакондами и удавами. В природе насчитывается 41 вид этих животных.

Зеленый питон (Morelia viridis).

Главная отличительная черта питонов это, безусловно, огромный размер. В среднем длина большинства видов составляет 3-6 м, самый маленький карликовый питон не превышает в длину 1 м, а размер самого крупного сетчатого питона составил 10 м при весе в 100кг! Эта змея долгое время носила звание самой большой в мире, пока не была найдена анаконда длиной 11 м. И хотя питоны уступили пальму первенства в размерах, их внешний вид все равно внушает уважение и даже страх. Тело этих змей довольно массивное, но при этом не утрачивает гибкости и подвижности, необходимой для удушения добычи.

Пестрый, или короткохвостый питон (Python curtus) отличается сильно утолщенным, но коротким телом.

Питоны считаются довольно примитивными змеями. Об этом свидетельствуют такие особенности как наличие остатков задних конечностей в виде крохотных выростов по бокам тела и хорошее развитие обоих легких (у более совершенных змей всегда развито только правое легкое).

На верхней челюсти питонов имеются крохотные ямки, в которых располагаются термолокаторы, с их помощью питоны находят свою жертву.

Этот признак делает их похожими на гремучих змей, хотя близкого родства между этими видами нет. Впрочем, питоны могут похвастать одной способностью, которая вообще не присуща рептилиям, - они умеют регулировать температуру тела. Правда, поддерживать ее на постоянном уровне они все равно не могут, зато могут «подогреть» себя на 5-15° выше температуры окружающей среды, что тоже немало. Для разогрева питоны используют особый способ. Если млекопитающие получают тепло химическим путем, то питоны просто сокращают мышцы туловища, в результате такой «холостой» работы и выделяется тепло.

Окраска питонов чаще всего представляет собой различные вариации пятен, реже бывает однотонной. У молодых особей рисунок отличается от взрослых, обычно он состоит из полос, которые с возрастом преобразуются в пятна. Цвет пятен может быть самым разным: у одних видов преобладают темные (черные, бурые, синие) тона, у других яркие (красные, оранжевые). Древесные виды окрашены в сочные зеленые оттенки.

Молодой кольчатый питон (Bothrochilus boa) окрашен контрастно, взрослые особи этого вида сплошь черные.

Все виды питонов обитают исключительно в Старом Свете: в Африке, Юго-Восточной Азии, Австралии, на Зондских островах и Новой Гвинее. Этим они отличаются от удавов - обитателей Нового Света. Питоны населяют тропический пояс, причем предпочитают леса с высокой влажностью, лишь несколько видов населяют саванны и пустыни (например, австралийский питон Рамсея). Вообще эти змеи водолюбивы, они охотно плавают и иногда могут преодолевать вплавь большие расстояния между островами одного архипелага. Самые крупные виды питонов (сетчатый, тигровый, иероглифовый) ведут наземный образ жизни, они ползают по земле в поисках добычи, лишь изредка подымаясь на нижние ветви деревьев. Ряд наземных видов в поисках добычи роют лесную подстилку. Наконец, существуют и древесные виды, которые практически всю жизнь проводят на ветвях, почти не спускаясь на землю.

Все виды питонов неядовиты и убивают своих жертв только силой собственных мышц. Свою добычу они обвивают кольцами тела, душат, а затем заглатывают целиком. Интересно, что древесные питоны имеют очень длинные зубы, которые позволяют удерживать добычу на весу в процессе заглатывания. Зеленый питон, к тому же, еще и приманивает своих жертв, двигая кончиком хвоста, напоминающим червя. Небольшие питоны ловят мышей, крыс, кроликов, фазанов, голубей, попугаев, диких кур и уток, крупные особи охотятся на обезьян, кенгуру, молодняк диких свиней и оленей. Их добычей могут стать и мелкие домашние животные (козы, поросята). Особое положение занимает черноголовый питон, который нападает исключительно на змей и варанов. Поскольку сам питон неядовит, то в процессе удушения его жертвы частенько кусают своего врага. И хотя среди них попадаются такие высокотоксичные виды как австралийская черная и тигровая змеи, их яд не действует на питона.

Этот черноголовый питон (Aspidites melanocephalus) решил отобедать вараном. Как и все змеи, свою жертву он начинает заглатывать с головы.

В узком желудке черноголового питона пища частично утрамбовывается, но все же очертания жертвы отчетливо проступают на «талии» сытой змеи.

Самая крупная добыча, которую способен проглотить питон, весит не более 20-40 кг. Таким образом, человек в число жертв этих змей не входит, поскольку они просто не способны проглотить его. За всю историю задокументировано только несколько случаев нападения сетчатого питона на людей (все жертвы были небольшого роста), что же касается остальных видов, то они могут проявлять агрессию только в случае провокации со стороны человека. После сытного обеда питон может обходиться без пищи несколько недель или месяцев, максимальная продолжительность голодовки, известная у этих рептилий, составляла 1,5 года!

Иероглифовый, или скальный питон (Python sebae) душит беременную козу, которую он подстерег на одном из африканских пастбищ.

Размножаются питоны обычно раз в году или еще реже. Самец находит самку по запаху и ласкает ее рудиментами задних конечностей (так называемыми анальными шпорами). После спаривания он удаляется и не проявляет ни малейшего интереса ни к избраннице, ни к своему потомству. Самка спустя 3-4 месяца после спаривания откладывает яйца. Их количество у разных видов варьирует от 8 до 107. В отличие от удавов и анаконд из яиц питонов молодые змеи вылупляются не сразу, их кладка нуждается в продолжительной инкубации. Все заботы о потомстве ложатся на самку, которая проявляет потрясающую заботу о будущих малышах. Отложенные яйца она бережно обвивает кольцами своего тела и не покидает их ни на минуту, в сильную жару она немного ослабляет хватку, чтобы проветрить кладку, а при понижении температуры начинает дрожать, чтобы разогреть свое тело и согреть яйца. В таком положении она находится около 2 месяцев и все это время ничего не ест.

Новорожденные питоны в среднем достигают длины 40-60 см и полностью самостоятельны. Интересно, что у этих змей отмечены случаи рождения однояйцевых близнецов. Растут питоны довольно быстро: половой зрелости они достигают к 3 годам, а полного развития - к 4-5.

Молодой зеленый питон отличается от взрослых особей ярко-лимонной окраской с мелкими красными пятнами.

В зоопарках питоны живут до 15-25 лет, но в естественных условиях продолжительность жизни самых крупных видов обычно не превышает 10-15 лет. Это связано с тем, что в природе на этих змей нападают другие хищники. Молодые особи могут стать жертвами крупных птиц и даже свиней, на взрослых питонов нападают леопарды, крокодилы. По характеру питоны не воинственные змеи. Заметив опасность издалека, они стараются уползти как можно быстрее, если же враг застал питона врасплох, то он громко шипит, отчаянно кусается и может нанести своему обидчику довольно глубокие, но не смертельные раны. Для постороннего наблюдателя такая борьба действительно выглядит устрашающе. Королевский питон в случае опасности сворачивается в тугой шар и прячет голову в кольцах своего тела. При всей своей простоте такая защита очень эффективна, ведь разжать мускулистые кольца человеку и большинству зверей не под силу.

В которой, в сжатой форме,
рассказывают об основах языка Python. Я предлагаю вам перевод этой статьи. Перевод не дословный. Я постарался подробнее объяснить некоторые моменты, которые могут быть непонятны.

Если вы собрались изучать язык Python, но не можете найти подходящего руководства, то эта
статья вам очень пригодится! За короткое время, вы сможете познакомиться с
основами языка Python. Хотя эта статья часто опирается
на то, что вы уже имеете опыт программирования, но, я надеюсь, даже новичкам
этот материал будет полезен. Внимательно прочитайте каждый параграф. В связи с
сжатостью материала, некоторые темы рассмотрены поверхностно, но содержат весь
необходимый метриал.

Основные свойства

Python не требует явного объявления переменных, является регистро-зависим (переменная var не эквивалентна переменной Var или VAR - это три разные переменные) объектно-ориентированным языком.

Синтаксис

Во первых стоит отметить интересную особенность Python. Он не содержит операторных скобок (begin..end в pascal или {..}в Си), вместо этого блоки выделяются отступами : пробелами или табуляцией, а вход в блок из операторов осуществляется двоеточием. Однострочные комментарии начинаются со знака фунта «#», многострочные - начинаются и заканчиваются тремя двойными кавычками «"""».
Чтобы присвоить значение пременной используется знак «=», а для сравнения -
«==». Для увеличения значения переменной, или добавления к строке используется оператор «+=», а для уменьшения - «-=». Все эти операции могут взаимодействовать с большинством типов, в том числе со строками. Например


>>> myvar = 3
>>> myvar += 2
>>> myvar -= 1
""«Это многострочный комментарий
Строки заключенные в три двойные кавычки игнорируются»""

>>> mystring = «Hello»
>>> mystring += " world."
>>> print mystring
Hello world.
# Следующая строка меняет
значения переменных местами. (Всего одна строка!)

>>> myvar, mystring = mystring, myvar

Структуры данных

Python содержит такие структуры данных как списки (lists), кортежи (tuples) и словари (dictionaries ). Списки - похожи на одномерные массивы (но вы можете использовать Список включающий списки - многомерный массив), кортежи - неизменяемые списки, словари - тоже списки, но индексы могут быть любого типа, а не только числовыми. "Массивы" в Python могут содержать данные любого типа, то есть в одном массиве может могут находиться числовые, строковые и другие типы данных. Массивы начинаются с индекса 0, а последний элемент можно получить по индексу -1 Вы можете присваивать переменным функции и использовать их соответственно.


>>> sample = , («a» , «tuple» )] #Список состоит из целого числа, другого списка и кортежа
>>> #Этот список содержит строку, целое и дробное число
>>> mylist = «List item 1 again» #Изменяем первый (нулевой) элемент листа mylist
>>> mylist[-1 ] = 3 .14 #Изменяем последний элемент листа
>>> mydict = {«Key 1» : «Value 1» , 2 : 3 , «pi» : 3 .14 } #Создаем словарь, с числовыми и целочисленным индексами
>>> mydict[«pi» ] = 3 .15 #Изменяем элемент словаря под индексом «pi».
>>> mytuple = (1 , 2 , 3 ) #Задаем кортеж
>>> myfunction = len #Python позволяет таким образом объявлять синонимы функции
>>> print myfunction(list )
3

Вы можете использовать часть массива, задавая первый и последний индекс через двоеточие «:». В таком случае вы получите часть массива, от первого индекса до второго не включительно. Если не указан первый элемент, то отсчет начинается с начала массива, а если не указан последний - то масив считывается до последнего элемента. Отрицательные значения определяют положение элемента с конца. Например:


>>> mylist = [«List item 1» , 2 , 3 .14 ]
>>> print mylist[:] #Считываются все элементы массива
["List item 1" , 2 , 3 .1400000000000001 ]
>>> print mylist #Считываются нулевой и первый элемент массива.
["List item 1" , 2 ]
>>> print mylist[-3 :-1 ] #Считываются элементы от нулевого (-3) до второго (-1) (не включительно)
["List item 1" , 2 ]
>>> print mylist #Считываются элементы от первого, до последнего

Строки

Строки в Python обособляются кавычками двойными «"» или одинарными «"» . Внутри двойных ковычек могут присутствовать одинарные или наоборот. К примеру строка «Он сказал "привет"!» будет выведена на экран как «Он сказал "привет"!». Если нужно использовать строку из несколько строчек, то эту строку надо начинать и заканчивать тремя двойными кавычками «"""». Вы можете подставить в шаблон строки элементы из кортежа или словаря. Знак процента «%» между строкой и кортежем, заменяет в строке символы «%s» на элемент кортежа. Словари позволяют вставлять в строку элемент под заданным индексом. Для этого надо использовать в строке конструкцию «%(индекс)s». В этом случае вместо «%(индекс)s» будет подставлено значение словаря под заданным индексом.


>>>print «Name: %s\nNumber: %s\nString: %s» % (myclass .name, 3 , 3 * "-" )
Name: Poromenos
Number: 3
String: -
strString = ""«Этот текст расположен
на нескольких строках»""

>>> print «This %(verb)s a %(noun)s.» % {«noun» : «test» , «verb» : «is» }
This is a test.

Операторы

Операторы while, if , for составляют операторы перемещения. Здесь нет аналога оператора select, так что придется обходиться if . В операторе for происходит сравнение переменной и списка . Чтобы получить список цифр до числа - используйте функцию range(). Вот пример использования операторов


rangelist = range (10 ) #Получаем список из десяти цифр (от 0 до 9)
>>> print rangelist
for number in rangelist: #Пока переменная number (которая каждый раз увеличивается на единицу) входит в список…
# Проверяем входит ли переменная
# numbers в кортеж чисел (3 , 4 , 7 , 9 )
if number in (3 , 4 , 7 , 9 ): #Если переменная number входит в кортеж (3, 4, 7, 9)...
# Операция «break » обеспечивает
# выход из цикла в любой момент
break
else :
# «continue » осуществляет «прокрутку»
# цикла. Здесь это не требуется, так как после этой операции
# в любом случае программа переходит опять к обработке цикла
continue
else :
# «else » указывать необязательно. Условие выполняется
# если цикл не был прерван при помощи «break ».
pass # Ничего не делать

if rangelist == 2 :
print «The second item (lists are 0-based) is 2»
elif rangelist == 3 :
print «The second item (lists are 0-based) is 3»
else :
print «Dunno»

while rangelist == 1 :
pass

Функции

Для объявления функции служит ключевое слово «def » . Аргументы функции задаются в скобках после названия функции. Можно задавать необязательные аргументы, присваивая им значение по умолчанию. Функции могут возвращать кортежи, в таком случае надо писать возвращаемые значения через запятую. Ключевое слово «lambda » служит для объявления элементарных функций.


# arg2 и arg3 - необязательые аргументы, принимают значение объявленное по умолчни,
# если не задать им другое значение при вызове функци.
def myfunction(arg1, arg2 = 100 , arg3 = «test» ):
return arg3, arg2, arg1
#Функция вызывается со значением первого аргумента - "Argument 1", второго - по умолчанию, и третьего - "Named argument" .
>>>ret1, ret2, ret3 = myfunction(«Argument 1» , arg3 = «Named argument» )
# ret1, ret2 и ret3 принимают значения "Named argument", 100, "Argument 1" соответственно
>>> print ret1, ret2, ret3
Named argument 100 Argument 1

# Следующая запись эквивалентна def f(x): return x + 1
functionvar = lambda x: x + 1
>>> print functionvar(1 )
2

Классы

Язык Python ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания «__» (например «__myprivatevar»). Мы можем также присвоить значение переменной класса извне. Пример:


class Myclass :
common = 10
def __init__(self ):
self .myvariable = 3
def myfunction(self , arg1, arg2):
return self .myvariable

# Здесь мы объявили класс Myclass . Функция __init__ вызывается автоматически при инициализации классов.
>>> classinstance = Myclass () # Мы инициализировали класс и переменная myvariable приобрела значение 3 как заявлено в методе инициализации
>>> #Метод myfunction класса Myclass возвращает значение переменной myvariable
3
# Переменная common объявлена во всех классах
>>> classinstance2 = Myclass ()
>>> classinstance.common
10
>>> classinstance2.common
10
# Поэтому, если мы изменим ее значение в классе Myclass изменятся
# и ее значения в объектах, инициализированных классом Myclass
>>> Myclass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# А здесь мы не изменяем переменную класса. Вместо этого
# мы объявляем оную в объекте и присваиваем ей новое значение
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> Myclass.common = 50
# Теперь изменение переменной класса не коснется
# переменных объектов этого класса
>>> classinstance.common
10
>>> classinstance2.common
50

# Следующий класс является наследником класса Myclass
# наследуя его свойства и методы, ктому же класс может
# наследоваться из нескольких классов, в этом случае запись
# такая: class Otherclass(Myclass1, Myclass2, MyclassN)
class Otherclass(Myclass):
def __init__(self , arg1):
self .myvariable = 3
print arg1

>>> classinstance = Otherclass(«hello» )
hello
>>> classinstance.myfunction(1 , 2 )
3
# Этот класс не имеет совйтсва test, но мы можем
# объявить такую переменную для объекта. Причем
# tэта переменная будет членом только class instance.
>>> classinstance.test = 10
>>> classinstance.test
10

Исключения

Исключения в Python имеют структуру try -except [except ionname]:


def somefunction():
try :
# Деление на ноль вызывает ошибку
10 / 0
except ZeroDivisionError :
# Но программа не "Выполняет недопустимую операцию"
# А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»
print «Oops, invalid.»

>>> fnexcept ()
Oops, invalid.

Импорт

Внешние библиотеки можно подключить процедурой «import », где - название подключаемой библиотеки. Вы так же можете использовать команду «from import », чтобы вы могли использовать функцию из библиотеки


import random #Импортируем библиотеку «random»
from time import clock #И заодно функцию «clock» из библиотеки «time»

Randomint = random .randint(1 , 100 )
>>> print randomint
64

Работа с файловой системой

Python имеет много встроенных библиотек. В этом примере мы попробуем сохранить в бинарном файле структуру списка, прочитать ее и сохраним строку в текстовом файле. Для преобразования структуры данных мы будем использовать стандартную библиотеку «pickle»


import pickle
mylist = [«This» , «is» , 4 , 13327 ]
# Откроем файл C:\binary.dat для записи. Символ «r»
# предотвращает замену специальных сиволов (таких как \n, \t, \b и др.).
myfile = file (r«C:\binary.dat» , «w» )
pickle .dump(mylist, myfile)
myfile.close()

Myfile = file (r«C:\text.txt» , «w» )
myfile.write(«This is a sample string» )
myfile.close()

Myfile = file (r«C:\text.txt» )
>>> print myfile.read()
"This is a sample string"
myfile.close()

# Открываем файл для чтения
myfile = file (r«C:\binary.dat» )
loadedlist = pickle .load(myfile)
myfile.close()
>>> print loadedlist
["This" , "is" , 4 , 13327 ]

Особенности

  • Условия могут комбинироваться. 1 < a < 3 выполняется тогда, когда а больше 1, но меньше 3.
  • Используйте операцию «del » чтобы очищать переменные или элементы массива .
  • Python предлагает большие возможности для работы со списками . Вы можете использовать операторы объявлении структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if - позволяет выбирать элементы по условию.
>>> lst1 =
>>> lst2 =
>>> print
>>> print
# Оператор «any» возвращает true, если хотя
# бы одно из условий, входящих в него, выполняется.
>>> any(i % 3 for i in )
True
# Следующая процедура подсчитывает количество
# подходящих элементов в списке
>>> sum (1 for i in if i == 3 )
3
>>> del lst1
>>> print lst1
>>> del lst1
  • Глобальные переменные объявляются вне функций и могут быть прочитанны без каких либо объявлений. Но если вам необходимо изменить значение глобальной переменной из функции, то вам необходимо объявить ее в начале функции ключевым словом «global », если вы этого не сделаете, то Python объявит переменную, доступную только для этой функции.
number = 5

def myfunc():
# Выводит 5
print number

def anotherfunc():
# Это вызывает исключение, поскольку глобальная апеременная
# не была вызванна из функции. Python в этом случае создает
# одноименную переменную внутри этой функции и доступную
# только для операторов этой функции.
print number
number = 3

def yetanotherfunc():
global number
# И только из этой функции значение переменной изменяется.
number = 3

Эпилог

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

Преимущества Python

  • Скорость выполнения программ написанных на Python очень высока. Это связанно с тем, что основные библиотеки Python
    написаны на C++ и выполнение задач занимает меньше времени, чем на других языках высокого уровня.
  • В связи с этим вы можете писать свои собственные модули для Python на C или C++
  • В стандартныx библиотеках Python вы можете найти средства для работы с электронной почтой, протоколами
    Интернета, FTP, HTTP, базами данных, и пр.
  • Скрипты, написанные при помощи Python выполняются на большинстве современных ОС. Такая переносимость обеспечивает Python применение в самых различных областях.
  • Python подходит для любых решений в области программирования, будь то офисные программы, вэб-приложения, GUI-приложения и т.д.
  • Над разработкой Python трудились тысячи энтузиастов со всего мира. Поддержкой современных технологий в стандартных библиотеках мы можем быть обязаны именно тому, что Python был открыт для всех желающих.

Теги:

  • Python
  • программирование
  • урок
Добавить метки