Проблемы с вложенными функциями в Python - PullRequest
0 голосов
/ 29 января 2020

У меня простая проблема с использованием Python функций.

Я постараюсь прояснить:

Мне нужно написать две функции:

Первый возвращает словарь, в котором ключами являются имена, связанные со списками из 5 случайных чисел.

{'John': [25, 27, 30, 14, 15], 'Mary': [15, 26, 14, 31, 12], 'Saray': [27, 15, 19, 14, 39]}

Это пример вывода первая функция.

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

{'John': [21.8], 'Mary': [19.6], 'Saray': [22.8]}

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

def First_Function(a):
    d={}
    [...]
    x=list(d.keys())
    y=list(d.values())
    return d

def Second_Function(a=x,b=y):

Но программа говорит, что x и y не определены. Что я могу сделать?

Ответы [ 3 ]

2 голосов
/ 29 января 2020

x и y являются допустимыми переменными только внутри первой функции.

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

Пример:

def ex2(d):
    x = list(d.keys())
    y = list(d.values())
    # What ever your function does.

result = ex1(a)
ex2(d=result)  # I gave myself a freedom to name parameter d
0 голосов
/ 29 января 2020

Если вы пишете две отдельные функции. это не вложение.

С двумя отдельными функциями это будет правильный способ сделать это:

def first_function(a):
    d={}
    [...]
    return d

def second_function (d: dict):
    result = {}
    for key in d:
        my_list = d[key]
        result[key] = sum(my_list)/len(my_list)
    return result

Вывод:

>>> second_function({'John': [25, 27, 30, 14, 15], 'Mary': [15, 26, 14, 31, 12], 'Saray': [27, 15, 19, 14, 39]})

{'John': 22.2, 'Mary': 19.6, 'Saray': 22.8}

Возможно, вы захотите измените код в соответствии с ожидаемым результатом. Однако я не мог не заметить, что среднее значение, рассчитанное для клавиши «Джон» в вашем вопросе, неверно.

Чтобы вложить вторую функцию в первую и выполнить ее как часть первой функция, вы можете использовать этот синтаксис:

def first_function(a):

    def second_function (d: dict):
        result = {}
        for key in d:
            my_list = d[key]
            result[key] = sum(my_list)/len(my_list)
        return result

    d={}
    [...]
    return second_function(d)
0 голосов
/ 29 января 2020

Если у вас есть словарь, сгенерированный первой функцией

 import numpy as np

 def func_(a):
     for key, value in a.items():
        a[key] = [np.mean(a[key])]
     return a

func_(a)
#op
{'John': [22.2], 'Mary': [19.6], 'Saray': [22.8]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...