Как вызвать функцию много раз с изменениями?
Как вызвать функцию несколько раз подряд?
Здравствуйте! В ячейке А1 есть функция, к примеру СЛУЧМЕЖДУ (1,4), в нужный момент времени её.
Как вызвать функцию ровно n раз в секунду?
Здравствуйте! пишу игру на с++. нужно вызывать функцию update ровно n раз в секунду. довольно.
Почему если несколько раз вызвать функцию она сработает только один раз
#include <iostream> using namespace std; int main() < int func(); < cout << "AAA";.
Нужно вызвать функцию 10 раз с разными параметрами (как обратиться к val1 и val2)?
// ОС4.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include.
4974 / 3210 / 1125
Регистрация: 21.03.2016
Сообщений: 7,940
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
Сообщение было отмечено vlasovsv26 как решение
Решение
1 2 3 4 5 6
def f(x): f(x) # Бесконечная рекурсия. Должно быть условие, ограничивающее ее. for i in range(999. ) f(x) x = x + 1
1 2 3
def f(x): if x 1000: // Вот так, например. f(x + 1)
Добавлено через 1 минуту
В твоем примере f(x) будет бесконечно вызывать саму себя и никогда не прекратит этого делать; и следовательно, x никогда не увеличится.
Добавлено через 42 секунды
Понять рекурсию лучше не просто примерами и теорией, а применяя ее на практике. Например, рисование фракталов — там тоже рекурсия. А главное, порисуйте, и сами все поймете.
Регистрация: 06.03.2017
Сообщений: 180
Semen-Semenich, Volobuev Ilya,
спасибо за ответы
еще возник вопрос: в конце я получил какое-то значение и мне нужно будет его использовать в других частях программы, чтобы это сделать нужно это значение сделать Global?
438 / 430 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
Сообщение от vlasovsv26
еще возник вопрос: в конце я получил какое-то значение и мне нужно будет его использовать в других частях программы, чтобы это сделать нужно это значение сделать Global?
Нет, его нужно возвращать из функции. Покажите код своей функции
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
Сообщение от vlasovsv26
еще возник вопрос: в конце я получил какое-то значение и мне нужно будет его использовать в других частях программы, чтобы это сделать нужно это значение сделать Global?
Если имеется ввиду, что рекурсивная функция должна вернуть результат, то например:
1 2 3 4 5
def f(x): if x 1000: return f(x + 1) else: return x
Регистрация: 06.03.2017
Сообщений: 180
Volobuev Ilya,
а почему идет уменьшение аргумента?
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
Не уменьшение. Сначала я функцией добираюсь до x == 9. Так как дальше идти не могу — вывожу x; дальше управление возвращается той функции, которая вызвала f(9) — то есть f(8). И так далее.
Добавлено через 15 минут
А вот так по порядку:
1 2 3 4 5 6
def f(x): if x 10: print(x) f(x + 1) f(1)
Добавлено через 5 минут
http://aliev.me/runestone/Recu. rsion.html
Регистрация: 06.03.2017
Сообщений: 180
дальше управление возвращается той функции, которая вызвала f(9) — то есть f(8) .
вот это интересно, это в питоне по умолчанию?
438 / 430 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
Сообщение от vlasovsv26
вот это интересно, это в питоне по умолчанию?
Это в любом языке, так работает рекурсия
Добавлено через 1 час 39 минут
Просто промоделируйте работу функции на бумажке и увидете, что перед тем как первый раз что-то напечатать функция вызывает сама себя 8 раз, а в последнем вызове печатает 9, возвращается к вызвавшей ее функции и печатает 8, и так до самаго первого вызова
Регистрация: 06.03.2017
Сообщений: 180
извиняюсь за ствою тупусть, но, наверно, я плохо понимаю:
def f(x): if xf(1)
пока х меньше 10 выполняется:
1+1 =2
2+1 = 3
.
8+1=9
печатать "9"дальше управление возвращается той функции, которая вызвала f(9) - то есть f(8)
вот это никак не могу понять, оно самостоятельно будет так передаваться всегда?
438 / 430 / 159 Регистрация: 21.05.2016 Сообщений: 1,338
Сообщение от vlasovsv26
извиняюсь за ствою тупусть, но, наверно, я плохо понимаю:
def f(x): if xf(1)
пока х меньше 10 выполняется:
1+1 =2
2+1 = 3
.
8+1=9
печатать "9"дальше управление возвращается той функции, которая вызвала f(9) - то есть f(8)
вот это никак не могу понять, оно самостоятельно будет так передаваться всегда?
функции f(1), f(2). f(9) запускаются следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14f(1) { f(2) { f(3) { . f(9) { print(9) } . print(3) } print(2) } print(1) }Как видно, когда завершается f(3), то продолжается f(2), а затем f(1)
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
Сообщение от vlasovsv26
вот это интересно, это в питоне по умолчанию?
Что значит по умолчнию? Это в любом языке так работает.
Если вызывается f(x), то она вызовет f(x + 1) и запомнит то место, с которого надо потом продолжать выполнение. Когда условие не выполнится функция f(n) передаст управление функции f(n-1) и так до самой первой.
Регистрация: 06.03.2017
Сообщений: 180oldnewyear, Volobuev Ilya,
большое спасибо, вроде теперь до меня дошло
Регистрация: 06.03.2017
Сообщений: 180
подскажите еще, вовремя рекурсии что хранится в стэке?
438 / 430 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
Это слишком широкий вопрос
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как реализовать функцию-член, которую можно вызвать только один единственный раз?
Доброго времени суток. Моя проблема в том, что при создании экземпляра дочернего класса.Что нужно сделать, чтобы данную функцию можно было вызвать еще раз, не меняя ее код
Функцию add() из фрагмента кода вызвали 10 раз. Что нужно сделать, чтобы эту функцию можно было.Как правильно передать вектор в функцию и вызвать эту функцию?
Здравствуйте, объясните как исправить ошибку. Возникает после for(), выдается, что размер polygon =.
Что будет если вызвать функцию void(*)() как функцию другого типа?
Будут ли утечки памяти? Очень нужно знать typedef int(*otherfunc)(int,int); void func() < >.Как в функцию main вызвать функцию из другого .c файла
Здравствуйте. Я написал программу, которая в функцию main вызывает функцию из другого .c файла, но.Как вы думаете, можно ли из основной ветки программы вызвать функцию, вложенную в другую функцию? Почему?
В языке Python можно внутри одной функции определять другую. Напишите программу по следующему.Как вызвать функцию в Python несколько раз?
Суть в том,чтобы после завершения игры можно было выбрать один из вариантов (да/нет) и продолжить игру не останавливая программу. Третий день изучения Python,не могу додуматься.Чайник.Попробовал несколько вариантов:функция внутри функции,while. `
import random popitka=0 print('Как тебя зовут?') name=input() print('Приветствую,',name,'. Игра называется "Угадай число"') print('Попробуй отгадать число от 1 до 20. У тебя 6 попыток. Удачи') def play(): number=random.randint(1,20) for popitka in range(1,7): guess=int(input()) if guessnumber: print('число слишком большое') if guess==number: break if guess==number: popitka=str(popitka) print('Поздравляю,',name,'Ты отгадал число с',popitka,'попытки') if guess!=number: print('Увы,',name,'. Ты проиграл') return guess play() print('Хочешь попробовать еще раз?(да/нет)') again=str(input()) if again=='да': play() elif again=='нет': print('Спасибо за игру!')`
Данный вариант выдает ошибку:
Traceback (most recent call last): File "C:/Users/User/Desktop/обучение/guessGAME1.py", line 27, in play() File "C:/Users/User/Desktop/обучение/guessGAME1.py", line 10, in play guess=int(input()) ValueError: invalid literal for int() with base 10: ' '
Функции в Python для начинающих
В этой части мы изучим функции — составные инструкции, которые могут принимать данные ввода, выполнять указания и возвращать данные вывода. Функции позволяют определять и повторно использовать определенную функциональность в компактной форме.
Вызвать функцию — значит передать ей входные данные, необходимые для выполнения и возвращения результата. Когда вы передаете функции входные данные, это называется передача параметра функции.
Функции в Python похожи на математические функции из алгебры. Например, в алгебре функция определяется как-то так:
f(x) = x * 2Левая часть определяет функцию f , принимающую один параметр, x . А правая часть — это определение функции, которое использует переданный параметр x , чтобы произвести вычисление и вернуть результат. В этом случае значением функции является ее параметр, умноженный на два.
Как в Python функция записывается следующим образом: имя_функции(параметры_через_запятую) . Чтобы вызвать функцию, после ее имени нужно указать круглые скобки и поместить внутрь параметры, отделив каждый из них запятой. Для создания функций в Python выберите ее имя, определите параметры, укажите, что функция должна делать и какое значение возвращать.
def имя_функции(параметры): определениие_функцииМатематическая функция f(x) = x * 2 в Python будет выглядеть вот так:
def f(x):return x * 2Ключевое слово def сообщает Python, что вы определяете функцию. После def вы указываете имя функции; оно должно отвечать тем же правилам, что и имена переменных. Согласно конвенции, в имени функции нельзя использовать заглавные буквы, а слова должны быть разделены подчеркиванием вот_так .
Как только вы присвоили своей функции имя, укажите после него круглые скобки. Внутри скобок должен содержаться один или несколько параметров.
После скобок ставится двоеточие, а новая строка начинается с отступа в четыре пробела. Любой код с отступом в четыре пробела после двоеточия является телом функции. В этом случае тело нашей функции состоит только из одной строки:
return x * 2Ключевое слово return используется для определения значения, которое функция возвращает при вызове.
Чтобы вызвать функцию в Python, мы используем синтаксис имя_функции(параметры, через, запятую) .
Ниже описан вызов функции f из предыдущего примера с параметром 2 .
Консоль ничего не вывела. Можно сохранить вывод вашей функции в переменной и передать ее функции print .
# Продолжение# предыдущего примераdef f(x):return x * 2result = f(2)print(result) # 4Вы можете сохранить результат, возвращаемый вашей функцией, в переменной и использовать это значение в программе позднее.
def f(x):return x + 1z = f(4)if z == 5:print("z равно 5")else:print ("z не равно 5")У функции может быть один параметр, несколько параметров или вообще их не быть. Чтобы определить функцию, не требующую параметров, оставьте круглые скобки пустыми.
def f():return 1 + 1result = f()print(result) # 2Если хотите, чтобы функция принимала больше одного параметра, отделите каждый параметр в скобках запятой.
def f(x, y, z):return x + y + zresult = f(1, 2, 3)print(result) # 6Наконец, функция не обязана содержать инструкцию return. Если функции нечего возвращать, она возвращает значение None .
def f():z = 1 + 1result = f()print(result) # NoneОбязательные и необязательные параметры ¶
Функция может принимать параметры двух типов. Те, что встречались вам до этого, называются обязательными параметрами. Когда пользователь вызывает функцию, он должен передать в нее все обязательные параметры, иначе Python сгенерирует исключение.
В Python есть и другой вид параметров — опциональные. Опциональные параметры определяются с помощью следующего синтаксиса: имя_функции(имя_параметра = значение_параметра) . Как и обязательные, опциональные параметры нужно отделять запятыми. Ниже приведен пример функции, в коде которой используется опциональный параметр.
def f(x=2):return x**xprint (f()) # 4print (f(4)) # 16Сначала функция вызывается без передачи параметра. Так как параметр необязательный, x автоматически становится равен 2 , и функция возвращает 4 .
Затем та же функция вызывается с параметром 4 . То есть x будет равен 4 и функция вернет 16 . Вы можете определить функцию, которая принимает как обязательные, так и опциональные параметры, но обязательные нужно определять в первую очередь.
def add(x, y=10):return x + yresult = add(2)print(result)Хотите выучить Python на практике?
Как использовать функции в Python
Любая функция начинается с инструкции def, названия и набора аргументов в скобках.
Анастасия Хамидулина
Автор статьи
7 июля 2022 в 11:14В компьютерной терминологии функция — это блок программного кода, который используется несколько раз для решения задачи. Тело функции — набор инструкций, которые поочередно исполняют в процессе вызова.
Обычно у функции есть один или несколько аргументов. Их указывают в скобках во время вызова. Они делятся на обязательные (позиционные) и со значением по ключу (именованные).
Синтаксис функций в Python
Любые функции и методы начинаются с инструкции def (от английского define — «определять»). За def в Python идет название функции, после — набор аргументов. Двоеточие в конце открывает блок тела функции, которое располагают с новой строки.
Изучить все функции и методы можно на курсе Skypro «Python-разработчик». За несколько месяцев реально освоить теорию и навыки, чтобы найти работу по новой специальности. А специалисты центра карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
В Python нет фигурных скобок для блока кода. Вместо них применяют отступы в четыре пробела. Новая инструкция — новая строка. Или можно отделить их точкой с запятой.Чтобы завершить функцию и вернуть из нее значение, используют ключевое слово return. Если этого не указать, то, когда тело функции достигает конца, функция завершится. Возвращается объект типа None.
Аргументы и их виды
Если надо передавать аргументы через функцию, нужно расположить их в скобках по порядку. Исключение — именованные аргументы. Такие аргументы могут идти в любом порядке, но сначала — позиционные.
Позиционные
Это обязательные аргументы. Чтобы функция работала корректно, важно размещать их в определенном порядке.
def addfunc(val1, val2): return val1 + val2 result = addfunc(3, 2) print(result) 5 addfunc() # вызов без аргументов Traceback (most recent call last): . TypeError: addfunc() missing 2 required positional arguments: 'val1' and 'val2' addfunc(1) # вызов с одним аргументом Traceback (most recent call last): . TypeError: addfunc() missing 1 required positional argument: 'val2'Когда вызывают функцию addfunc, то передают ей два обязательных аргумента. Они будут доступны внутри тела функции и ассоциированы с переменными val1 и val2. Если этого не сделаете, получите ошибку TypeError.
Но иногда нужны более гибкие функции, которые работают с переменной длиной аргументов. Для этого есть специальная конструкция, она упаковывает переданные позиционные аргументы в переменную:
def addconcat(*args): value = 0 for item in args: if isinstance(item, (int, float)): value += item else: print(f" is not a digit") return value total = addconcat(1, "Hello", 2, 3, 4, "Python", 5.0, 6.25, 7.15, 'string') Hello is not a digit World is not a digit string is not a digit print("Total:", total) Total: 28.4Обращаются к позиционному аргументу такого множества с помощью операции индексации:
def demo_func(*args): try: print(args[0]) print(args[1]) except IndexError: passPython-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT
Именованные
Это параметры функции с предустановленным значением. Перезаписать его можно с помощью нового значения по имени атрибута:
def hey_concat(*args, name="World!"): print("Hey there,", name) hey_concat() Hey there, World! hey_concat(name="Alex") Hey there, AlexАтрибуту name присвоили иное значение. Это поменяет результат склеивания строк и последующий вывод.
Именованные аргументы могут быть переменной длины. Конструкция упаковывания параметров похожа на предыдущую, но вместо множества используют словарь:
def print_kwargs(**kwargs): print(kwargs) # отобразит словарь print_kwargs(kone="One", ktwo=2, kthree=3.0)
Для доступа к значениям именованных аргументов внутри функции используют интерфейс словаря. Вы можете проверить наличие ключа, соответствие значения типу. А еще предусмотреть прочие проверки, прежде чем исполнять тело функции.
def kwargs_addconcat(**kwargs): a = kwargs.get("a", None) b = kwargs.get("b", None) if not isinstance(a, type(b)): raise TypeError("Ошибка! Разные типы") if isinstance(a, str): return f"Результат конкатенации строк\n" elif isinstance(a, int): return f"Результат сложения чисел\n" return "Ошибка" print(kwargs_addconcat(a=1, b=2)) Результат сложения чисел 3 print(kwargs_addconcat(a=1, b="World!")) . TypeError: Ошибка! Разные типы print(kwargs_addconcat(a="Hello, ", b="World!")) Результат конкатенации строк Hello, World! # Без аргументов print(kwargs_addconcat()) ОшибкаВ примере упаковываем именованные аргументы в переменную с названием kwargs. Из нее в теле функции по ключам a и b пытаемся получить значения. А если они не найдутся — объект None. Далее проверяем наличие обоих аргументов и принадлежность одному типу данных. Затем возвращаем результат выполнения в зависимости от типа переданных параметров.
Еще можно комбинировать позиционные и именованные параметры. Сначала располагают позиционные (обязательные) аргументы. Сразу за ними идет переменная, в которую записывают все остальные параметры без явного ключа. Далее — именованные аргументы с предустановленным значением (значением по умолчанию). После него располагают переменную словаря с остальными именованными параметрами.
Общая форма последовательности:
def func(a, b, *args, name="Default", **kwargs): return NoneФункции и области видимости
Область видимости разрешает конфликт имен и гарантирует, что любой объект, созданный внутри функции, не перезапишет предыдущий объект с таким же именем без явного указания.
✈️ Глобальная
Это пространство имен модуля. В него входят названия переменных, классов, функций и всех остальных объектов, созданных в конкретном файле.
var1 = 12 def global_func(): print(x)Здесь целочисленный объект var1 и функция global_func — в глобальной области видимости.
✈️ Локальная
Внутри функций можно создавать временные переменные для вычислений. Чтобы избежать конфликта имен и случайной перезаписи, под каждую функцию выделяется свое пространство:
var1 = 2213 # глобальная переменная # глобальная функция, использующая глобальную переменную def func_one(): print(var1) # глобальная функция, использующая локальную переменную def func_two(): var1 = "Local value" # создание локальной переменной print(var1) # функция, изменяющая значение глобальной переменной def func_three(): global var1 var1 = "Local to global"В последней функции указываем, что хотим использовать глобальную переменную с помощью ключевого слова global вместе с именем нужной переменной.
func_one() 2213 func_two() Local value func_three() # функция меняет значение глобальной переменной func_one() # и результат функции func_one Local to global✈️ Область объемлющих функций
В Python есть ключевое слово nonlocal. Например, его применяют при создании декораторов. Оно указывает, что нужно использовать переменную уровнем выше, но при этом не относящуюся к глобальной области видимости.
Так реализуют декоратор счетчика вызова функции Python с этим ключевым словом:
def count_deco(wrapper_func): var = 0 def inner(): nonlocal var wrapper_func() var += 1 print(var) return inner @count_deco def deco_demo(): print("A few of example text. ") for _ in range(5): deco_demo() A few of example text. 1 A few of example text. 2 A few of example text. 3 A few of example text. 4 A few of example text. 5Lambda-функции (анонимные)
Одна из интересных особенностей Python — это анонимные (лямбда) функции. Это простое выражение, которое можно присвоить переменной и использовать повторно. Чаще применяют для фильтрации элементов множества:
list_values = [1, 3, 4, 2, 6, 7, 5, 8, 9] filter(lambda x : x % 2 == 0, list_values) [2, 4, 6, 8]Оператор возврата return
Результат вычислений функции возвращают с помощью инструкции return. Возвращать можно объекты любого типа и в любом количестве через запятую.
Если функция возвращает несколько объектов, они будут запакованы в кортеж (tuple). Тогда к конкретным элементам обращаются либо по индексу, либо с помощью распаковки множества, где каждый элемент присваивают отдельной переменной. Функция, где явно не указано возвращаемое значение, по умолчанию вернет объект типа None.
def arithmetics(x, y): return x + y, x - y, x * y, x / y, x // y results = arithmetics(22, 3) print(results) (25, 19, 66, 7.333333333333333, 7) print(results[0]) 25 r1, r2, r3, r4, r5 = arithmetics(4, 4) # результаты сложения и умножения print(r1) 8 print(r3) 16Оператор возврата yield
Помимо обычных есть функции-генераторы. Очевидный плюс — они в оперативной памяти не хранят все объекты, которые используют. Есть отложенное выполнение. Такая функция возобновляет работу там, где остановилась. Она генерирует значения, а не вычисляет их.
Эту функцию используют, чтобы создавать автоматические тесты, что здорово ускоряет и упрощает работу тестировщика. Научиться автоматизации можно на курсе Skypro «Инженер по тестированию». Опытные преподаватели-практики дадут всю необходимую теорию и помогут отработать знания на практических задачах.
QA-автоматизатор. Знакомство с Python. Урок 1
Чтобы передать аргументы генератору и вернуть значения, применяют ключевое слово yield. Когда элементы объекта-генератора заканчиваются, тот возбуждает исключение типа StopIteration:
def gen_demo(times, var): for _ in range(times): yield var gen_inst = gen_demo(25, "Gen demo text") for _ in range(26): print(next(gen_inst)) Gen demo text Gen demo text Gen demo text Gen demo text . Traceback (most recent call last): . StopIteration[FAQ] Частые вопросы
Функции vs процедуры — в чём отличие?
Процедура — это единичная инструкция, функция — подпрограмма, которая выполняет действие.
Для чего нужна область видимости?
Чтобы решить конфликт имен.
Как провести распаковку множества?
Нужно присвоить его такому же количеству переменных, сколько в нём содержится объектов.
Обязательно ли наличие аргументов для функции?
Нет, но чаще у функции есть один или несколько аргументов.