Monthy Python

Ramhak konung@ic.ru

Xakep, номер #017, стр. 017-026-2


>>> x = 0

>>> x

0

>>> y = 0.666e+10

>>> y

6660000000.0

Строки аналогичны строкам в perl`е, но здесь другая нотация и нет особого различия между одинарной и двойной кавычками. В отличие от perl`а, к строкам можно обращаться как к массивам, получая соответствующий элемент, либо указывая границы - string[begin:end] и получая в ответ подстроку из string, начиная с begin и заканчивая end. Можно не указывать begin или end, тогда (по умолчанию) begin = 0 (нумерация символов в строке идет с нуля), а end = длине строки:

>>> s = 'Zed`s dead, baby. Zed`s dead.'

>>> s[0]

'Z'

>>> s[0:3]

'Zed'

>>> s[:3]

'Zed'

>>> s[18:]

'Zed`s dead.'

Есть еще одна вкусность: параметры begin и end могут быть отрицательны. На хрена отрицательные? Все очень просто: при таком раскладе соответствующие номера отсчитываются с конца строки, что жутко удобно, когда нужен последний элемент или часть строки в конце. Кроме того, строки можно умножать на числа. :) Не совсем так, как в perl`е, но тоже кульно:

>>> s[:-12]

'Zed`s dead, baby.'

>>> s[-1]

'.'

>>> s[-5:-1]

'dead'

>>> s[-5:-1]*10

'deaddeaddeaddeaddead'

Строки также имеют свойство immutable (неизменный - англ.) - то есть, попросту говоря, нельзя изменить какую-либо часть строки. Присвоить вот так нельзя:

>>> s[5] = 'a'

Traceback (innermost last):

File "", line 1, in ?

s[5] = a

TypeError: object doesn't support item assignment

Но умелыми ручками программиста это обходится примерно так:

>>> s[5] = 'a'

Traceback (innermost last):

File "", line 1, in ?

s[0] = a

TypeError: object doesn't support item assignment

>>> s = s[:5] + 'a' + s[6:]

>>> s

'Zed`sadead, baby. Zed`s dead.'

В личной переписке Guido van Rossum сказал, что данное свойство было сделано в силу того, что строки отнесли к атомарным единицам структуры языка (то есть буковкам, цифиркам - всему, что не делится на более мелкие элементы), и что им сначала было в лом переделывать, а потом уже было поздно. :) Лентяи.

Следующий тип данных в списке - списки. :) Это неотъемлемая часть языка с advanced data types (так называют типы данных, которые очень гибки в использовании. Например, безразмерные массивы - сколько нужно, столько и примет, причем без дополнительных объявлений и описаний), коими являются многие ЯП, появившиеся с середины 90-х. Списки по сути дела - массивы. Но, в отличие от массивов в классических ЯП, здешние списки могут содержать элементы различных типов, что чрезвычайно удобно, когда не знаешь, что за данные представил пользователь для анализа/работы (юзера обычно сдают кал на анализ. :) Заводят списки и работают с ними в Python`е так:

>>> a = ['1', 2, '34']

>>> a

['1', 2, '34']

>>> a.append ('Так добавляют в список. Можно еще a.insert(0, string)')

>>> a.remove ('А так удаляют')

>>> a

['1', 2, '34', 'Так добавляют в список']

>>> a.count('34')

1

В Python`е списки обладают дополнительным свойством nested (гнездиться - англ.). Это означает, что можно включать списки в списки (поддерживается функция включения масла в масло (:). То есть "гнездить" их как попало (или как душе угодно):

Назад на стр. 017-026-1  Содержание  Вперед на стр. 017-026-3