/
Вопросы и ответы
/
Python
/

Как вызвать функцию внутри другой функции в Python?

Как вызвать функцию внутри другой функции в Python?

4 года назад

Andrey Moshkov

Ответы

1

Чтобы вызвать функцию внутри другой функции в Python, достаточно написать имя функции, за которым следуют круглые скобки (), внутри тела вызывающей функции.

Пример:

1
2
3
4
5
6
7
8
9
10
def greet():
    print("Hello"),
    print("Welcome to the Python world!")

def main():
    print("Starting the program...")
    greet() # Вызов функции greet() из функции main()
    print("Program ended.")

main() # Вызов функции main(), которая, в свою очередь, вызывает функцию greet()

В этом примере функция main() вызывает функцию greet(). При запуске программы сначала будет выполнен код внутри функции main(), который вызовет функцию greet(), а затем продолжит выполнение кода внутри main() после завершения выполнения greet().

Результат выведет

1
2
3
4
Starting the program...
Hello
Welcome to the Python world!
Program ended.

2 года назад

Алёна Шереметьева

0

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

1
2
3
4
5
6
7
8
def функция1():
    print("Это функция 1")

def функция2():
    print("Это функция 2")
    функция1()  # вызов функции1 внутри функции2

функция2()

В данном примере, при вызове функции функция2(), сначала будет выведено "Это функция 2", а затем вызовется функция функция1(), и на экран будет выведено "Это функция 1".

Также, можно передавать аргументы в вызываемую функцию, например:

1
2
3
4
5
6
7
8
def привет(имя):
    print("Привет, " + имя)

def поздравление():
    имя = "Мария"
    привет(имя)

поздравление()

В этом примере, при вызове функции поздравление(), переменная имя будет равна "Мария", и функция привет() будет вызвана с этим аргументом, после чего на экран будет выведено "Привет, Мария".

2 года назад

Elena Gromova

0

Функцию вызывают внутри другой так же, как в основном коде: имя и круглые скобки.

1
2
3
4
5
6
7
8
9
10
11
def greet(name):
    return f'Привет, {name}!'

def welcome(name):
    message = greet(name)
    print(message)
    print('Рады видеть на курсе.')

welcome('Аня')
# Привет, Аня!
# Рады видеть на курсе.

Порядок объявления

Python ищет функцию в момент вызова. Поэтому greet можно описать и ниже welcome:

1
2
3
4
5
6
7
def welcome(name):
    print(greet(name))

def greet(name):
    return f'Привет, {name}!'

welcome('Аня')  # работает

Ошибка будет, только если вызвать welcome раньше, чем Python дошёл до def greet:

1
2
3
4
5
6
7
def welcome(name):
    print(greet(name))

welcome('Аня')  # NameError: name 'greet' is not defined

def greet(name):
    return f'Привет, {name}!'

Передача результата

Внутренняя функция должна вернуть значение через return. Без него вызов вернёт None:

1
2
3
4
5
6
7
def square(x):
    x * x  # нет return

def sum_of_squares(a, b):
    return square(a) + square(b)

sum_of_squares(2, 3)  # TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

Забытые скобки

1
2
3
4
5
6
def hello():
    return 'Привет'

def main():
    print(hello)    # <function hello at 0x...>
    print(hello())  # Привет

Без скобок функция не вызывается. Python выводит сам объект функции.

Функция внутри функции

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

1
2
3
4
5
6
7
8
def outer(numbers):
    def double(x):
        return x * 2

    return [double(n) for n in numbers]

outer([1, 2, 3])  # [2, 4, 6]
double(5)         # NameError

Вложенная функция видит переменные внешней:

1
2
3
4
5
6
7
def make_multiplier(k):
    def multiply(x):
        return x * k
    return multiply

triple = make_multiplier(3)
triple(10)  # 30

Это называется замыканием.

Функция как аргумент

1
2
3
4
5
def apply(func, value):
    return func(value)

apply(len, 'Хекслет')       # 7
apply(str.upper, 'python')  # 'PYTHON'

Функцию передают без скобок, а вызывают уже внутри.

Функция вызывает сама себя

1
2
3
4
5
6
def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)

factorial(5)  # 120

Это рекурсия. Python ограничивает глубину примерно 1000 вызовами, дальше — RecursionError.

Функции, return и области видимости разбирают в бесплатном курсе «Основы Python».

3 дня назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845