Использовать переменную, созданную внутри функции, как параметр функции - PullRequest
0 голосов
/ 08 мая 2020

Предположим, у вас есть следующий код для определения этой простой функции:

def a(x,y,b):

    z=[x,y]

    c=b*2

    return c

Я хочу вызвать эту функцию со значением z[0] в качестве входных данных для параметра b. Если я попытаюсь вызвать функцию следующим образом:

a(x,y,z[0])

, я получу сообщение об ошибке, поскольку переменная 'z' определена внутри функции и не существует до ее запуска.

Я думал, что при вызове функции python просто заменит вставленные входные данные относительным параметром внутри функции, чтобы выполнить желаемое вычисление, независимо от предварительного существования входной переменной. Я имею в виду, что в моей функции, например, если я вставляю в качестве входных данных z[0], я ожидаю, что python просто принимает цифры z [0] и копирует их в функцию вместо b и выполняет умножение, взяв первый элемент массива z.

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

a(2,3,z[0])

вот шаги выполнения функции:

1) вычисляет массив z=[2,3]

2) вычисляет c=z[0]*2 ie c=2*2

3) возвращает c=4

Шаг номер 2), однако, не выполняется, поскольку переменная z создается внутри функции. Я спрашиваю, есть ли способ заставить функцию «копировать» входные цифры z[0] внутри функции вместо параметра b во время выполнения самой функции, чтобы python не учитывал z[0] как несуществующая переменная, а как простой фрагмент кода для замены b на.

1 Ответ

0 голосов
/ 09 мая 2020

Это ужасно, но я начинаю думать, что вы этого хотите. Но не делай этого. Действительно.

def a(x,y,b):
    z=[x,y]
    c=eval(b)*2
    return c

r = a(2,3,'z[0]')
print(r)

Если вам интересно, почему это работает, это откладывает оценку выражения z[0] до тех пор, пока z не будет определено внутри области действия функции, вместо того, чтобы не оценить его в область действия вызывающего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...