Материал: Bilety_Programmirovanie

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
  1. Словари. Создание словарей, добавление элементов, обращение к элементам. Методы для работы со словарями.

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

Данный словарь использует строки в качестве ключей. Значением тоже являются строки.

d = {'персона': 'человек',

'марафон': 'гонка бегунов длиной около 26 миль',

'противостоять': 'оставаться сильным, несмотря на давление',

'бежать': 'двигаться со скоростью'}

country = {} # Создание пустого словаря

d = dict()

Обращаться к элементу словаря по номеру нельзя

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

country = {'Italy':'Rome', 'USA': 'Washington', 'Russia': 'Moscow'}

print('Cловарь:', country)

print('Столица России:', country['Russia'])

del country['Russia']

print('Cловарь после удаления:',country)

Cловарь: {'Italy': 'Rome', 'USA': 'Washington', 'Russia': 'Moscow'}

Столица России: Moscow

Cловарь после удаления: {'Italy': 'Rome', 'USA': 'Washington'}

Если элемента с заданным ключом нет в словаре, и при попытке вывода и при попытке удаления возникает ошибка

Методы словарей

dict.clear() - очищает словарь. dict.copy() - возвращает копию словаря.

dict.fromkeys(seq[, value]) - создает словарь с ключами из seq и значением value (при отсутствии параметра value значения задаутся None - пусто).

dict.get(key[, default]) - возвращает значение по ключю key. Если ключа key нет в словаре, то возвращает значение default (если параметр default не указан, то возвращает значение None - пусто).

dict.items() - возвращает список из пар (ключ, значение).dict.keys() - возвращает список из ключей словаря.

dict.pop(key[, default]) - удаляет ключ key и возвращает значение. Если ключа нет, возвращает default (при отсутствии default бросает исключение).

dict.popitem() - удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены.

dict.setdefault(key[, default]) - возвращает значение ключа key, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None).

dict.update([other]) - обновляет словарь, добавляя пары (ключ, значение) из словаря other. Существующие ключи перезаписываются. Возвращает None (не новый словарь!). dict.values() - возвращает список значений из словаря.

  1. Именованные функции: определение и вызов.

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

Именованные функции Объявление функции и вызов

Именованные функции начинаются с ключевого слова def.

Функции описывают, затем можно использовать.

Формат описания функции:

In [ ]:

def <имя функции>(<список аргументов>):

<операторы>

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

Приведем пример функции, которая выводит приветствие

In [1]:

A.update(B, ...); A |= B - добавление элементов множества В в множество А.

A.intersection_update(B, ...); A &= B - в множество А записывается пересечение множеств А и В.

A.difference_update(B, ...); A -= B - в множество А записывается разность множеств А и В, т.е. элменты множества A, которых нет в множестве B.

A.symmetric_difference_update(B); A ^= B - в множество А записывается множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.

Рассмотрим примеры

a = {1, 2, 3, 4}

a.remove(1)#удаление элемента из множества

print(a)

{2, 3, 4}

a = {1, 2, 3, 4}

a.remove(0)#если элемента не существует, то выдается ошибка

a = {1, 2, 3, 4}

a.discard(0)#удаляет элемент.

#Если элемента в множестве нет, то ничего не происходит

print(a)

{1, 2, 3, 4}

def Hello(name):

print("Hello, ", name, sep='')

#вызов функции

Hello("Marry") #приветствует Marry

Hello("Alex") #приветствуем Alex

Hello, Marry

Hello, Alex

Функция может возвращать некоторое значение, например, стандартная функция cos(x) возвращает число. Тогда в теле функции должен присутствовать оператор return, а после него то значение, которое должно быть возвращено в качестве результата функции.

Рассмотрим пример функции, которая возвращает либо какое из чисел максимальное, либо фразу "Числа равны"

In [2]:

def maximum(a, b):

if a > b:

return "Наибольшее число " + str(a)

elif b > a:

return "Наибольшее число " + str(b)

else:

return "Числа равны " + str(b)

print(maximum(2, 5))

print(maximum(12, 5))

print(maximum(5, 5))

Наибольшее число 5

Наибольшее число 12

Числа равны 5

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

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

Обязательные аргументы (Required arguments), Ключевые аргументы (Keyword argument), Аргументы со значением по умолчанию (Default argument), Аргументы произвольной длины (Variable-length argumens)

Обязательные аргументы

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

Ключевые аргументы

В этом случае для передачи аргументов функции используется имя (ключ) вместо позиции (как было до сих пор). Рассмотрим пример

def f(osn, pok): #функция возводит osn в степень pok

return osn**pok

print(f(osn=2, pok=3))

print(f(pok=3, osn=2))#порядок параметров при вызове может не сопадать с порядком при описании,

#если указывать имя параметра вместе со значением при вызове

Аргументы со значением по умолчанию

При описании функции можно указывать значение аргументов по умолчанию, тогда такой аргумент при вызове может отсутствовать. Рассмотрим пример

#функция возводит osn в степень pok, параметр osn будет иметь значение по умолчанию 1, параметр pok будет иметь значение по умолчанию 1

def f(osn=1, pok=1):

return osn**pok

print(f(2, 3))# получим 2 в степени 3

print(f(2)) # получим 2 в степени 1

print(f()) # получим 2 в степени 1

Если в функции имеется несколько аргументов со значением по умолчанию, то при вызове можно опустить только один последний или несколько аргументов. Например, в предыдущем примере можно при вызове опустить один последний аргумент или два аргумента. Опустить только первый аргумент, указав второй нельзя. Можно опустить только первый аргумент, но второй должен быть указан как ключевой

Аргументы произвольной длины

Иногда возникает ситуация, когда заранее не известно, какое количество аргументов необходимо принять функции. В этом случае следует использовать аргументы произвольной длины. Они задаются именем переменной, перед которой ставится звездочка (*) или две звездочки (**).

Когда мы объявляем параметр со звёздочкой (*args), то все позиционные аргументы, начиная с этой позиции и до конца, будут собраны в кортеж под именем args.

Аналогично, когда мы объявляем параметры с двумя звёздочками (**param), все ключевые аргументы, начиная с этой позиции и до конца, будут собраны в словарь под именем param.

Оба способа объявления аргументов можно использовать в одной функции.

  1. Глобальные и локальные переменные.

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

Рассмотрим на примере

def function(a):

c = 5 #локальная переменная

global d #глобальная переменная

d = 100 #изменяем глобальную переменную

a = a + 1

print('Внутри функции d=', d, 'f=', f, 'a=', a) #Внутри функции d= 100 f= 1 a= 2

d = 10 #глобальная переменная

f = 1 #глобальная переменная

print('До вызова функции d=',d, 'f=', f) #До вызова функции d= 10 f= 1

function(f)

print('После вызова функции d=',d, 'f=', f) #После вызова функции d= 100 f= 1

!!! Аргументы передаются в функцию всегда по значению. Т.е. изменения значения аргумента внутри функции не отобразятся на значении переменной, которую подставили вместо этого аргумента при вызове функции.

Попробуем не писать слово global перед переменной d

def function(a):

c = 5 #локальная переменная

d = 100 #изменяем переменную, которая в данном случае будет локальной

a = a + 1

print('Внутри функции d=', d, 'f=', f, 'a=', a) #Внутри функции d= 100 f= 1 a= 2

d = 10 #глобальная переменная

f = 1 #глобальная переменная

print('До вызова функции d=', d, 'f=', f) #До вызова функции d= 10 f= 1

function(f)

print('После вызова функции d=', d, 'f=', f) #После вызова функции d= 10 f= 1

В этом случае переменная d будет локальной внутри функции, но существует и глобальная переменная d. Т.е. имена глобальной и локальной переменных совпадают. Внутри функции изменили значение аргумента (a = a + 1). Эти изменения не отразились на значении глобальной переменной f, ее значение осталось равно 1

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

def fuction(a):

a[0] = a[0] + 10

print('Внутри функции', *a) #Внутри функции 11 2 3 4 5

a = [1, 2, 3, 4, 5]

print('До вызова функции', *a) #До вызова функции 1 2 3 4 5

fuction(a)

print('После вызова функции', *a) #После вызова функции 11 2 3 4 5

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

def fuction(a):

a = [11, 12, 13, 14]

print('Внутри функции', *a) #Внутри функции 11 12 13 14

a = [1, 2, 3, 4, 5]

print('До вызова функции', *a) #До вызова функции 1 2 3 4 5

fuction(a)

print('После вызова функции', *a) # После вызова функции 1 2 3 4 5

Источник: https://studfile.net/preview/16688519/