![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Определение функции и ее вызовСодержание книги
Поиск на нашем сайте
def func(): pass
def func(): print("Текст до инструкции return") return "Возвращаемое значение" print("Эта инструкция никогда не будет выполнена")
print(func()) # Вызываем функцию
Листинг 11.1. Определения функций def print_ok(): """ Пример функции без параметров """ print("Сообщение при удачно выполненной операции")
def echo(m): """ Пример функции с параметром """ print(m)
def summa(x, y): """ Пример функции с параметрами, возвращающей сумму двух переменных """ return x + y
Листинг 11.2. Вызов функций print_ok() # Вызываем функцию без параметров echo("Сообщение") # Функция выведет сообщение x = summa(5, 2) # Переменной x будет присвоено значение 7 a, b = 10, 50 y = summa(a, b) # Переменной y будет присвоено значение 60
def summa(x, y): return x + y
print(summa("str", "ing")) # Выведет: string print(summa([1, 2], [3, 4])) # Выведет: [1, 2, 3, 4]
Листинг 11.3. Сохранение ссылки на функцию в переменной def summa(x, y): return x + y
f = summa # Сохраняем ссылку в переменной f v = f(10, 20) # Вызываем функцию через переменную f
Листинг 11.4. Функции обратного вызова def summa(x, y): return x + y
def func(f, a, b): """ Через переменную f будет доступна ссылка на функцию summa() """ return f(a, b) # Вызываем функцию summa()
# Передаем ссылку на функцию в качестве параметра v = func(summa, 10, 20)
>>> def summa(x, y): """ Суммирование двух чисел """ return x + y
>>> dir(summa) ['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] >>> summa.__name__ 'summa' >>> summa.__code__.co_varnames ('x', 'y') >>> summa.__doc__ ' Суммирование двух чисел ' Расположение определений функций def summa(x, y): return x + y v = summa(10, 20) # Вызываем после определения. Все нормально
v = summa(10, 20) # Идентификатор еще не определен. Это ошибка!!! def summa(x, y): return x + y
Листинг 11.5. Определение функции в зависимости от условия # -*- coding: utf-8 -*- n = input("Введите 1 для вызова первой функции: ") if n == "1": def echo(): print("Вы ввели число 1") else: def echo(): print("Альтернативная функция")
echo() # Вызываем функцию
input()
def echo(): print("Вы ввели число 1") def echo(): print("Альтернативная функция") echo() # Всегда выводит "Альтернативная функция" Необязательные параметры и сопоставление по ключам Листинг 11.6. Необязательные параметры def summa(x, y=2): # y — необязательный параметр return x + y a = summa(5) # Переменной a будет присвоено значение 7 b = summa(10, 50) # Переменной b будет присвоено значение 60
def summa(x, y): return x + y print(summa(10, 20)) # Выведет: 30
Листинг 11.7. Сопоставление по ключам def summa(x, y): return x + y print(summa(y=20, x=10)) # Сопоставление по ключам
def summa(a=2, b=3, c=4): # Все параметры являются необязательными return a + b + c print(summa(2, 3, 20)) # Позиционное присваивание print(summa(c=20)) # Сопоставление по ключам
Листинг 11.8. Пример передачи значений из кортежа и списка def summa(a, b, c): return a + b + c t1, arr = (1, 2, 3), [1, 2, 3] print(summa(*t1)) # Распаковываем кортеж print(summa(*arr)) # Распаковываем список t2 = (2, 3) print(summa(1, *t2)) # Можно комбинировать значения
Листинг 11.9. Пример передачи значений из словаря def summa(a, b, c): return a + b + c d1 = {"a": 1, "b": 2, "c": 3} print(summa(**d1)) # Распаковываем словарь t, d2 = (1, 2), {"c": 3} print(summa(*t, **d2)) # Можно комбинировать значения
def func(a, b): a, b = 20, "str" x, s = 80, "test" func(x, s) # Значения переменных x и s не изменяются print(x, s) # Выведет: 80 test
def func(a, b): a[0], b["a"] = "str", 800 x = [1, 2, 3] # Список y = {"a": 1, "b": 2} # Словарь func(x, y) # Значения будут изменены!!! print(x, y) # Выведет: ['str', 2, 3] {'a': 800, 'b': 2}
Листинг 11.10. Передача изменяемого объекта в функцию def func(a, b): a = a[:] # Создаем поверхностную копию списка b = b.copy() # Создаем поверхностную копию словаря a[0], b["a"] = "str", 800 x = [1, 2, 3] # Список y = {"a": 1, "b": 2} # Словарь func(x, y) # Значения останутся прежними print(x, y) # Выведет: [1, 2, 3] {'a': 1, 'b': 2}
func(x[:], y.copy())
def func(a=[]): a.append(2) return a print(func()) # Выведет: [2] print(func()) # Выведет: [2, 2] print(func()) # Выведет: [2, 2, 2]
def func(a=None): # Создаем новый список, если значение равно None if a is None: a = [] a.append(2) return a print(func()) # Выведет: [2] print(func([1])) # Выведет: [1, 2] print(func()) # Выведет: [2] Переменное число параметров в функции Листинг 11.11. Сохранение переданных данных в кортеже def summa(*t): """ Функция принимает произвольное количество параметров """
res = 0 for i in t: # Перебираем кортеж с переданными параметрами res += i return res print(summa(10, 20)) # Выведет: 30 print(summa(10, 20, 30, 40, 50, 60)) # Выведет: 210
def summa(x, y=5, *t): # Комбинация параметров res = x + y for i in t: # Перебираем кортеж с переданными параметрами res += i return res print(summa(10)) # Выведет: 15 print(summa(10, 20, 30, 40, 50, 60)) # Выведет: 210
Листинг 11.12. Сохранение переданных данных в словаре def func(**d): for i in d: # Перебираем словарь с переданными параметрами print("{0} => {1}".format(i, d[i]), end=" ") func(a=1, b=2, c=3) # Выведет: a => 1 c => 3 b => 2
Листинг 11.13. Комбинирование параметров def func(*t, **d): """ Функция примет любые параметры """ for i in t: print(i, end=" ") for i in d: # Перебираем словарь с переданными параметрами print("{0} => {1}".format(i, d[i]), end=" ") func(35, 10, a=1, b=2, c=3) # Выведет: 35 10 a => 1 c => 3 b => 2 func(10) # Выведет: 10 func(a=1, b=2) # Выведет: a => 1 b => 2
def func(*t, a, b=10, **d): print(t, a, b, d) func(35, 10, a=1, c=3) # Выведет: (35, 10) 1 10 {'c': 3} func(10, a=5) # Выведет: (10,) 5 10 {} func(a=1, b=2) # Выведет: () 1 2 {} func(1, 2, 3) # Ошибка. Параметр a обязателен!
def func(x=1, y=2, *, a, b=10): print(x, y, a, b) func(35, 10, a=1) # Выведет: 35 10 1 10 func(10, a=5) # Выведет: 10 2 5 10 func(a=1, b=2) # Выведет: 1 2 1 2 func(a=1, y=8, x=7) # Выведет: 7 8 1 10 func(1, 2, 3) # Ошибка. Параметр a обязателен! Анонимные функции Листинг 11.14. Пример использования анонимных функций f1 = lambda: 10 + 20 # Функция без параметров f2 = lambda x, y: x + y # Функция с двумя параметрами f3 = lambda x, y, z: x + y + z # Функция с тремя параметрами print(f1()) # Выведет: 30 print(f2(5, 10)) # Выведет: 15 print(f3(5, 10, 30)) # Выведет: 45
Листинг 11.15. Необязательные параметры в анонимных функциях f = lambda x, y=2: x + y print(f(5)) # Выведет: 7 print(f(5, 6)) # Выведет: 11
Листинг 11.16. Сортировка без учета регистра символов arr = ["единица1", "Единый", "Единица2"] arr.sort(key=lambda s: s.lower()) for i in arr: print(i, end=" ") # Результат выполнения: единица1 Единица2 Единый Функции-генераторы Листинг 11.17. Пример использования функций-генераторов def func(x, y): for i in range(1, x+1): yield i ** y for n in func(10, 2): print(n, end=" ") # Выведет: 1 4 9 16 25 36 49 64 81 100 print() # Вставляем пустую строку for n in func(10, 3): print(n, end=" ") # Выведет: 1 8 27 64 125 216 343 512 729 1000
Листинг 11.18. Использование метода __next__() def func(x, y): for i in range(1, x+1): yield i ** y
i = func(3, 3) print(i.__next__()) # Выведет: 1 (1 ** 3) print(i.__next__()) # Выведет: 8 (2 ** 3) print(i.__next__()) # Выведет: 27 (3 ** 3) print(i.__next__()) # Исключение StopIteration
Листинг 11.19. Вызов одной функции-генератора из другой (простой случай) def gen(l): for e in l: yield from range(1, e + 1)
l = [5, 10] for i in gen([5, 10]): print(i, end = " ")
Листинг 11.20. Вызов одной функции-генератора из другой (сложный случай) def gen2(n): for e in range(1, n + 1): yield e * 2
def gen(l): for e in l: yield from gen2(e)
l = [5, 10] for i in gen([5, 10]): print(i, end = " ") Декораторы функций Листинг 11.21. Декораторы функций def deco(f): # Функция-декоратор print("Вызвана функция func()") return f # Возвращаем ссылку на функцию @deco def func(x): return "x = {0}".format(x)
print(func(10))
@deco
def deco(f): print("Вызвана функция func()") return f def func(x): return "x = {0}".format(x) # Вызываем функцию func() через функцию deco() print(deco(func)(10))
Листинг 11.22. Указание нескольких декораторов def deco1(f): print("Вызвана функция deco1()") return f def deco2(f): print("Вызвана функция deco2()") return f @deco1 @deco2 def func(x): return "x = {0}".format(x) print(func(10))
Листинг 11.23. Ограничение доступа с помощью декоратора passw = input("Введите пароль: ")
def test_passw(p): def deco(f): if p == "10": # Сравниваем пароли
return f else: return lambda: "Доступ закрыт" return deco # Возвращаем функцию-декоратор
@test_passw(passw) def func(): return "Доступ открыт" print(func()) # Вызываем функцию Рекурсия. Вычисление факториала Листинг 11.24. Вычисление факториала def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n — 1)
while True: x = input("Введите число: ") if x.isdigit(): # Если строка содержит только цифры x = int(x) # Преобразуем строку в число break # Выходим из цикла else: print("Вы ввели не число!") print("Факториал числа {0} = {1}".format(x, factorial(x)))
>>> import math >>> math.factorial(5), math.factorial(6) (120, 720)
|
|||||||
Последнее изменение этой страницы: 2016-06-23; просмотров: 315; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.241.128 (0.009 с.) |