Главная страница
Навигация по странице:

  • Примечание

  • Предупреждение

  • Язык Python. Уроки Python. Python Lessons Oleg Kishinskii мар. 30


    Скачать 406.31 Kb.
    НазваниеPython Lessons Oleg Kishinskii мар. 30
    АнкорЯзык Python
    Дата09.12.2022
    Размер406.31 Kb.
    Формат файлаdocx
    Имя файлаУроки Python.docx
    ТипДокументы
    #835711
    страница6 из 9
    1   2   3   4   5   6   7   8   9

    Словари


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

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

    Словари - это изменяемый упорядоченный тип данных:

      • данные в словаре - это пары ключ: значение

      • доступ к значениям осуществляется по ключу, а не по номеру, как в списках

      • данные в словаре упорядочены по порядку добавления элементов

      • так как словари изменяемы, то элементы словаря можно менять, добавлять, удалять

      • ключ должен быть объектом неизменяемого типа: число, строка, кортеж

      • значение может быть данными любого типа для удобства словарь можно записать так:



    london = { 'id': 1,

    'name':'London', 'it_vlan':320, 'user_vlan':1010,
    (continues on next page)


    'mngmt_vlan':99, 'to_name': None, 'to_id': None,

    'port':'G1/0/11'

    }

    (продолжение с предыдущей страницы)

    Для того, чтобы получить значение из словаря, надо обратиться по ключу, таким же образом, как это было в списках, только вместо номера будет использоваться ключ:




    D = {'food': 'Spam', 'quantity': 4, 'color': 'pink'}

    При написании в виде литералов словари указываются в фигурных скобках и состо ят из ряда пар “ключ: значение”. Словари удобны всегда, когда нам необходимо ассо циировать набор значений с ключами — например, для описания свойств чего-нибудь. Рассмотрим следующий словарь их трех элементов (с ключами ’ food ’, ’ quantity ’ и ’ color ’, возможно представляющих детали позиции гипотетического меню):

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




    D = {}

    D['name'] = 'Bob'

    D['job'] = 'dev' D['age'] =40

    print (D)

    #{'*:age40,'job':'dev','name':'Bob'}

    print(D['name'])

    #Bob

    Хотя форма литерала в фигурных скобках встречается, пожалуй, чаще приходится видеть словари, построенные другими способами (все данные программы редко из вестны до ее запуска). Скажем, следующий код начинает с пустого словаря и заполняет его по одному ключу за раз. В отличие от присваивания элементу в списке, находящемуся вне установленных границ, которое запрещено, при- сваивание новому ключу словаря приводит к созданию этого ключа:

    В словаре в качестве значения можно использовать словарь:


    london_co = { 'r1': {

    'hostname': 'london_r1', 'location': '21 New Globe Walk', 'vendor': 'Cisco',

    'model': '4451',

    'ios': '15.4',

    'ip': '10.255.0.1'
    (continues on next page)


    }, 'r2': {

    'hostname': 'london_r2', 'location': '21 New Globe Walk', 'vendor': 'Cisco',

    'model': '4451',

    'ios': '15.4',

    'ip': '10.255.0.2'

    }, 'sw1': {

    'hostname': 'london_sw1', 'location': '21 New Globe Walk', 'vendor': 'Cisco',

    'model': '3850',

    'ios': '3.6.XE',

    'ip': '10.255.0.101'

    }

    (продолжение с предыдущей страницы)

    }


    london_co['r1']['ios'] #'15.4'

    london_co['r1']['model'] #'4451'

    london_co['sw1']['ip'] #'10.255.0.101'

    Получить значения из вложенного словаря можно так:

        1. Методы для работы со словарями

    clear()


          • позволяет очистить словарь:

    copy()



          • london = {'name': 'London1', 'location': 'London Str', 'vendor': 'Cisco'} london2 = london.copy()

            id(london) #25524512

            id(london2) #25563296london['vendor'] = 'Juniper' london2['vendor'] #'Cisco'

            создает полную копию словаря


    Примечание: Если указать, что один словарь равен другому, то london2 будет ссылкой на словарь. И при изменениях словаря london меняется и словарь london2, так как это ссылки на один и тот же объект.

    get()


          • запрашивает ключ, и если его нет, вместо ошибки возвращает None.


    london = {'name': 'London1', 'location': 'London Str', 'vendor': 'Cisco'} print(london.get('ios')) #None
    (continues on next page)


    #Методget()позволяеттакжеуказыватьдругоезначениевместоNone

    print(london.get('ios', 'Ooops')) #Ooops

    (продолжение с предыдущей страницы)

    setdefault()



          • london = {'name': 'London1', 'location': 'London Str', 'vendor': 'Cisco'} ios = london.setdefault('ios')

            print(ios) #None

            london #{'name':'London1','location':'LondonStr','vendor':'Cisco','ios':None}

            london.setdefault('name') #'London1'

            #Второйаргументпозволяетуказать,какоезначениедолжносоответствоватьключу

            model = london.setdefault('model', 'Cisco3580') print(model) #Cisco3580

            london

            {'name': 'London1', 'location': 'London Str', 'vendor': 'Cisco',

            'ios': None,

            'model': 'Cisco3580'}

            #Методsetdefaultзаменяеттакуюконструкцию:

            if key in london:

            value = london[key] else:

            london[key] = 'somevalue' value = london[key]

            ищет ключ, и если его нет, вместо ошибки создает ключ со значением None, если ключ есть, setdefault возвращает значение, которое ему соответствует:

    keys(), values(), items()


    Все три метода возвращают специальные объекты view, которые отображают ключи, значения и пары ключ-значение словаря соответственно.


    london = {'name': 'London1', 'location': 'London Str', 'vendor': 'Cisco'} keys = london.keys()

    print(keys)

    #dict_keys(['name','location','vendor'])
    #Сейчаспеременнойkeysсоответствуетviewdict_keys,вкоторомтриключа:name,locationиvendor.#Но,еслимыдобавимвсловарьещеоднупаруключ-значение,объектkeysтожепоменяется:london['ip'] = '10.1.1.1'

    keys

    #dict_keys(['name','location','vendor','ip'])
    #Еслинужнополучитьобычныйсписокключей,которыйнебудетменятьсясизменениямисловаря,

    ˓→достаточноконвертироватьviewвсписок:

    list_keys = list(london.keys()) list_keys

    #['name','location','vendor','ip']

    Очень важная особенность view заключается в том, что они меняются вместе с изменением словаря. И фактически они лишь дают способ посмотреть на соответствующие объекты, но не создают их копию.

    del()



    london = {'name': 'London1', 'location': 'London Str', 'vendor': 'Cisco'} del london['name']

    london

    #{'location':'LondonStr','vendor':'Cisco'}

    Удаляет ключ и значение

    update()



    r1 = {'name': 'London1', 'location': 'London Str'} r1.update({'vendor': 'Cisco', 'ios':'15.2'})

    r1

    #{'name':'London1','location':'LondonStr','vendor':'Cisco','ios':'15.2'}
    #Аналогичнымобразомможнообновитьзначения:r1.update({'name': 'london-r1', 'ios':'15.4'}) r1

    '''

    {'name':'london-r1', 'location':'LondonStr', 'vendor':'Cisco',

    'ios':'15.4'} '''

    Позволяет добавлять в словарь содержимое другого словаря:

        1. Кортежи



    T = (1, 2, 3, 4) #Кортежиз4элементов

    len(Т) #Длина4

    Т + (5, б) #Конкатенация(1,2,3,4,5,6)

    Т[О] #Индексация,нарезаниеит.д.

    Объект кортежа примерно похож на список, который нельзя изменять — кортежи являются последо- вательностями подобно спискам, но они неизменяемые подобно строка ми. Функционально они исполь- зуются для представления фиксированных коллекций элементов: скажем, компонентов специфической даты в календаре. Синтаксически они записываются в круглых, а не квадратных скобках и поддержи- вают произвольные типы, произвольное вложение и обычные операции над последовательностями:
    Примечание: Главное отличие кортежей заключается в том, что после создания их нельзя из менять, т.е. они являются неизменяемыми последовательностями (одноэлементные кортежи вроде приведенно- го ниже требуют хвостовой запятой): tuple2 = („password“,)


    Итак, зачем нам тип, который похож на список, но поддерживает меньше операций? Откровенно го- воря, на практике кортежи применяются в целом не так часто, как списки, но весь смысл в их неиз- меняемости. Если вы передаете коллекцию объектов внутри своей программы в виде списка, тогда он может быть модифицирован где угодно; если вы используете кортеж, то изменить его не удастся. То есть кортежи обеспечивают своего рода ограничение целостности, что удобно в программах, крупнее тех, которые мы будем писать здесь. Позже в книге мы еще обсудим кортежи, включая расширение, которое построено поверх них и называется именованными кортежами.

        1. Множество


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

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


    cities = ['Санкт-Петербург', 'Хабаровск', 'Казань', 'Санкт-Петербург', 'Казань'] un_cities = set(cities)

    for city in un_cities:

    print("Один мой друг живёт в городе " + city)

    '''

    ОдинмойдругживётвгородеХабаровск

    ОдинмойдругживётвгородеСанкт-ПетербургОдинмойдругживётвгородеКазань

    '''

    С помощью множества можно легко убрать повторяющиеся элементы:

    Множества полезны тем, что с ними можно делать различные операции и находить объединение мно- жеств, пересечение и так далее.


    vlans1 = {10,20,30,50,100}

    vlans2 = {100,101,102,102,200}

    vlans1.union(vlans2) #{10,20,30,50,100,101,102,200}

    vlans1 | vlans2 #{10,20,30,50,100,101,102,200}

    #Пересечениемножествможнополучитьспомощьюметодаintersection()илиоператора&

    vlans1 = {10,20,30,50,100}

    vlans2 = {100,101,102,102,200}

    vlans1.intersection(vlans2) #{100}

    vlans1 & vlans2 #{100}


    Предупреждение: Нельзя создать пустое множество с помощью литерала (так как в таком случае это будет не множество, а словарь): set1 = {} type(set1) #dict

    Но пустое множество можно создать таким образом set2 = set() type(set2) #set

    Объединение множеств можно получить с помощью метода union() или оператора |:


        1. Методы для работы с множествами

    add()



    set1 = {10,20,30,40}

    set1.add(50)

    set1 #{10,20,30,40,50}

    добавляет элемент во множество:

    discard()


    позволяет удалять элементы, не выдавая ошибку, если элемента в множестве нет



    set1 #{10,20,30,40,50}

    set1.discard(55)

    set1 #{10,20,30,40,50}

    set1.discard(50)

    set1 #{10,20,30,40}



    clear()



    set1 = {10,20,30,40}

    set1.clear() set1 #set()

    очищает множество

        1. Булевы значения


    Булевы значения в Python это две константы True и False.

    В Python истинными и ложными значениями считаются не только True и False.

          • истинное значение:

          • любое ненулевое число

          • любая непустая строка

          • любой непустой объект

          • ложное значение:

          • 0

          • None

          • пустая строка

          • пустой объект

    Остальные истинные и ложные значения, как правило, логически следуют из условия. Для проверки булевого значения объекта, можно воспользоваться bool:



        1. Преобразование типов


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

    int()


    преобразует строку в int:



    bin()



    bin(10) #'0b1010'

    bin(255) #'0b11111111'

    Преобразовать десятичное число в двоичный формат можно с помощью bin():

    hex()



    hex(10) #'0xa'

    hex(255) #'0xff'

    Аналогичная функция есть и для преобразования в шестнадцатеричный формат:

    list()



    list("string") #['s','t','r','i','n','g']

    list({1,2,3}) #[1,2,3]

    list((1,2,3,4)) #[1,2,3,4

    Функция list() преобразует аргумент в список:

    set()



    set([1,2,3,3,4,4,4,4]) #{1,2,3,4}

    set((1,2,3,3,4,4,4,4)) #{1,2,3,4}

    set("string string") #{'','g','i','n','r','s','t'}

    Функция set() преобразует аргумент в множество:

    tuple()



    tuple([1,2,3,4]) #(1,2,3,4)

    tuple({1,2,3,4}) #(1,2,3,4)

    tuple("string") #('s','t','r','i','n','g')

    Функция tuple() преобразует аргумент в кортеж:

    str()



    str(10) #'10'

    Функция str() преобразует аргумент в строку:

        1. Проверка типов

    isdigit()



    "a".isdigit() #False"a10".isdigit() #False"10".isdigit() #True

    Проверяет, сосоит ли строка из одних только цифр

    isalpha()



    "a".isalpha() #True"a100".isalpha() #False"a-- ".isalpha() #False"a ".isalpha() #False

    Проверяет, состоит ли строка из одних букв:

    isalnum()



    "a".isalnum() #True

    "a10".isalnum() #True

    позволяет проверить, состоит ли строка из букв или цифр:

    type()


    Иногда, в зависимости от результата, библиотека или функция может выводить разные типы объектов. Например, если объект один, возвращается строка, если несколько, то возвращается кортеж.

    Нам же надо построить ход программы по-разному, в зависимости от того, была ли возвращена строка или кортеж.


    type("string") #str

    type("string") is str #True

    #Аналогичноскортежемдругимитипамиданных):

    type((1,2,3)) #tupletype((1,2,3)) is tuple #Truetype((1,2,3)) is list #False

    В этом может помочь функция type():

        1. Файлы


    Объекты файлов являются главным интерфейсом к внешним файлам на компью тере. Они могут применяться для чтения и записи текстовых заметок, аудиоклипов, документов Excel, сохраненных сообщений электронной почты и всего того, что вы в итоге сохранили на своем компьютере. Файлы относятся к основным типам, но они кое в чем своеобразны — специфический литеральный синтаксис для их создания от сутствует, Взамен, чтобы создать объект файла, необходимо вызвать встроенную фун кцию open, передав ей в виде строк имя внешнего файла и необязательный режим обработки.


    f = open('data.txt' , 'w') #Создатьновыйфайлврежимезаписи('w')

    f.write('Hello\n') #Записатьвнего строкисимволов

    f.write ('world\n') #Возвратитьколичествозаписанныхэлементов

    f.close() #Закрытьдлясбрасываниябуфероввыводанадиск

    Например, для создания выходного текстового файла понадобится передать его имя и строку режима обработки ’ w ’, чтобы записывать данные:

    Код создает файл в текущем каталоге и записывает в него текст (имя файла мо жет содержать полный путь к каталогу, если нужно получить доступ к файлу где-то в другом месте на компьютере). Чтобы прочитать то, что было записано, необходимо повторно открыть файл в режиме обработки ’ г ’ для чтения текстового ввода (он вы бирается по умолчанию, если в вызове строка режима не указана). Затем следует про читать содержимое файла в строку и отобразить ее. В сценарии содержимое файла всегда будет строкой независимо от типа находящихся в нем данных:

    Python Lessons






    Примечание: Обратите внимание, что для того что бы прочесь все строки из файла, нам нужно обернуть функцию чтения в цикл for line in open(’data.txt’): print(line)

    так же не забывайте закрывать файл после операции чтения или записи f.close



    Примечание: Ранее в примере с подсчетом слов мы использовали друую констукцию

    with open(filename, encoding=»utf8») as file: #эта строка открывает файл text = file.read() #читаем содержимое файла и записываем все в переменную text

    text = text.replace(«n», » «) #преобразуем наш текст в одну длинную строку заменив символ перевода строки на пробел

    text = text.replace(«,», «»).replace(«.», «»).replace(«?», «»).replace(«!», «») так же уберем все запетые, пробелы, и прочие знаки пунктуации

    text = text.lower() #перведем все слова в строчные, тоесть если было «Начало изучения Языка Программирования», то будет «начало изучения языка программирования»

    words = text.split() #создадим список слов («списки»,»выгледят»,»вот»,»так») words.sort()

    Такой подход позволяет не закрывать файл в ручную.


      1. 1   2   3   4   5   6   7   8   9


    написать администратору сайта